背景
- Spring cache: 无法满足本地缓存和远程缓存同时使用。使用远程缓存时无法自动刷新
- Guava cache:内存型缓存,占用内存,无法做分布式缓存
- redis/memcache: 分布式缓存,缓存失效时,会导致数据库雪崩效应
- Ehcache:内存型缓存,可以通过RMI做到全局分布式缓存,效果差
JetCache出现,解决上述的问题:
- 分布式缓存和内存型缓存可以共存,当共存时优先访问内存,保护远程缓存
- 自动刷新策略
- 利用不严格的分布式锁,对同一key,全局只有一台机器自动刷新
demo:
注解说明
- @Cached:将方法的结果缓存下来,可配置cacheType参数:REMOTE, LOCAL, BOTH,LOCAL时可配置localLimit参数来设置本地local缓存的数量限制。condition参数可配置在什么情况下使用缓存,condition和key支持SPEL语法
- @CacheInvalidate:缓存失效,同样可配置condition满足的情况下失效缓存。不足:不能支持是在方法调用前还是调用后将缓存失效
- @CacheUpdate:缓存更新,value为缓存更新后的值。此操作是调用原方法结束后将更新缓存
- @CreateCache:用于字段上的注解,创建缓存。根据参数,创建一个name的缓存,可以全局显式使用这个缓存参数对象
- @CacheRefresh:自动刷新策略,可设置refresh、stopRefreshAfterLastAccess、refreshLockTimeout参数。
适合场景
- 对于更新不频繁,实效性不高,key的量不大,但是访问量高的场景:新闻网站的热点新闻、电商系统的商品信息、微博热点
不适合场景
- 更新频繁,且对数据实时性要求很高(电商系统的库存,商品价格)
- key的量多,需要自动刷新的key量也多