Spring Cache 并非具体的缓存技术,而是基于各种缓存产品(如 Guava、EhCache、 Redis 等)共性进行的一层封装,让用户更加专注于应用层面。 具体的底层缓存技术究竟采用了 Guava、EhCache 还是 Redis,只需要简单的配置就 可以实现方便的切换。
主要接口
org.springframework.cache.Cache: 缓存本身
org.springframework.cache.CacheManager: 对缓存的处理和管理
使用
声明缓存
@Cacheable("books")<br>public Book findBook(ISBN isbn) {...}
用法很简单,在方法上添加@cacheable 等注解,表示缓存该方法的结果。 当方法有被调用时,先检查 cache 中有没有针对该方法相同参数的调用发生过,如果有, 从 cache 中查询并返回结果。如果没有,则执行具体的方法逻辑,并把结果缓存到 cache 中。当然这一系列逻辑对于调用者来说都是透明的。<br>
开启Spring的Cache功能
<cache:annotatiion-drivenn />
@EnableCaching
后端配置
@Bean<br>public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { return RedisCacheManager<br>.builder(connectionFactory) .cacheDefaults(<br>RedisCacheConfiguration.defaultCacheConfig()<br>.entryTtl(Duration.ofSeconds(20))) //缓存时间绝对过期时间20s .transactionAware()<br>.build(); }
缓存key的生成
其他操作
@CachePut(增加/修改)<br>
应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存。
@CacheEvict(删除)
应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据
@Cacheable(查询)
应用到读取数据的方法上,即可缓存的方法,如查找方法:先从缓存中读取,如果没有 再调用方法获取数据,然后把数据添加到缓存中