前言
这个还是有需要了解的,记得有次面试官问到redis的时候,突然问你了解过缓存规范吗?
我懵了,这是啥?我还以为有是使用redis的管理工具,就跟她扯了Jedis和redisTemplate的内容,然后我他说我想要了解的不是这个,它说道我想要了解的是JSR管理规范,但是那时候我根本不知道这个是什么,只能说有空会在去了解的。
不过说实在这个东西也只要了解一下就行了
核心内容
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设置
依赖
使用JSR107可以添加下面的包
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>
几个重要的缓存概念和注解
名称 | 解释 |
---|---|
Cache | 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等 |
CacheManager | 缓存管理器,管理各种缓存(Cache)组件 |
@Cacheable | 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 |
@CacheEvict | 清空缓存 |
@CachePut | 保证方法被调用,又希望结果被缓存(缓存更新) |
@EnableCaching | 开启基于注解的缓存 |
keyGenerator | 缓存数据时key生成策略 |
serialize | 序列化 |
后记
一般不直接使用JSR-107开发,因为JSR-107仅仅定义了接口,而没有实现,直接通过JSR开发非常麻烦,
现在spring官方根据缓存规则,它出了一个自己的缓存抽象,他的实现模式就是JSR-107