JetCache

261 阅读2分钟

背景

  • Spring cache: 无法满足本地缓存和远程缓存同时使用。使用远程缓存时无法自动刷新
  • Guava cache:内存型缓存,占用内存,无法做分布式缓存
  • redis/memcache: 分布式缓存,缓存失效时,会导致数据库雪崩效应
  • Ehcache:内存型缓存,可以通过RMI做到全局分布式缓存,效果差

JetCache出现,解决上述的问题:

  • 分布式缓存和内存型缓存可以共存,当共存时优先访问内存,保护远程缓存
  • 自动刷新策略
  • 利用不严格的分布式锁,对同一key,全局只有一台机器自动刷新

demo:

github.com/zhuzhenke/c…

注解说明

  • @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量也多