SpringBoot缓存篇-缓存抽象
缓存是每个系统都应该考虑的功能,它可以用来加速系统的访问,提升系统性能与响应速度。例如要经常访问的高频热点数据,例如某网商平台的商品信息,商品信息储存在数据库中,如果每次访问都要查询数据库的话,耗时很大,且会对数据库服务器造成很大的压力,所以需要缓存中间件来减少查询次数,降低服务器压力的同时,提升查询速率。访问请求到达时,直接访问缓存,缓存中有则直接返回,没有再查询数据库,然后放入缓存中。
还有一个应用场景就是验证码,验证码是临时性数据,一段时间内有效,用完就可以删除,这样的数据无需存入数据库中,所以可以使用缓存来存储这些临时性数据,等用户使用完成后自动让它清除。
一、JSR107缓存规范
Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和Expiry
- CachingProvider:定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期间访问多个CachingProvider。
- CacheManager: 定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
- Cache: 是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
- Entry: 是一个存储在Cache中的key-value键值对。
- Expiry: 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。
使用时需引入如下依赖:
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>
JSR107在实际开发中使用的不多,为了简化开发Spring提供了自己的缓存抽象,也定义了一些类似的注解,在实际开发中一般使用Spring的缓存抽象。
二、Spring缓存抽象
Spring框架本身并没有实现缓存解决方案,但是从3.1开始定义了org.springframework.cache.Cache
和org.springframework.cache.CacheManager接口,提供对缓存功能的声明,能够与多种流行的缓存实现集成。
重要概念&缓存注解
| Cache | 缓存接口,定义缓存操作。实现有:RidisCache、EhCacheCache、ConcurrentMapCache等 |
|---|---|
| CacheManager | 缓存管理器,管理各种缓存(Cache)组件 |
| @Cacheable | 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 |
| @CacheEvict | 清空缓存 |
| @CachePut | 保证方法被调用,又希望结果被缓存 |
| @EnableCaching | 开启基于注解的缓存 |
| keyGenerator | 缓存数据时key的生成策略 |
| serialize | 缓存数据时value的序列化策略 |

浙公网安备 33010602011771号