J2Cache缓存2分钟自动失效原因查找
博客专区 > zero_xmw 的博客 > 博客详情
J2Cache缓存2分钟自动失效原因查找
zero_xmw 发表于1年前
J2Cache缓存2分钟自动失效原因查找
  • 发表于 1年前
  • 阅读 137
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

最近在项目内又一次用了j2cache分布式缓存,遇到一个奇怪的问题,用RedisManager监控发现,过2分钟左右会自动清除缓存。

我分析后应该有这几种可能性:

1、redis服务器配置导致缓存定时清除

2、jedis配置导致缓存定时删除

3、ehcache配置导致缓存删除,同时J2Cache内部在被动清除ehcache缓存时也通知redis

4、程序内不小心调用了evict等方法导致缓存失效

 

step1、最先怀疑的是第4点,程序内不小心调用了清除缓存的方法。于是在J2Cache入口处设置断点本地调试,2分钟后缓存失效,未进断点,排除4

step2、接着怀疑第1点,redis服务器配置导致缓存定时清除。于是在程序内调用J2Cache设置缓存,再关闭进程,等待5分钟,缓存未消失,排除1

step3、接着怀疑第2点,jedis配置导致缓存定时删除。我看了下jedis的配置选项,没有关于缓存过期的配置,都是一些关于连接池的配置,基本排除3

step4、最后怀疑是不是J2Cache在一级缓存被动清除时也会通知redis,只能看看J2Cache源码了!

根据“Cache data expired...”这条log找到清除2级缓存的代码位置(RedisCacheChannel.java)

跟踪方法调用位置(EhCache.java)

看到这可以知道,是ehcache缓存失效时通知2级缓存失效导致的。

解决方法:J2Cache每个region对应ehcache.xml里的每个cache.name,根据实际情况配置缓存时间

标签: Redis Ehcache J2Cache
共有 人打赏支持
zero_xmw
粉丝 14
博文 7
码字总数 18021
×
zero_xmw
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: