缓存数据获取为空
问题描述
RBucket<xxxx> rule = redissonPlus.getBucket(RULE_KEY_PREFIX + ruleId,codec);
if (rule != null && rule.get() != null) {
super.logContext.appendln("load rule:"+rule.get().getId());
}
通过rule获取二级缓存(localcache+redis) get时总是出现null的情况
- if中判断了不为null后出现null的情况
rule.get()
查询获取缓存的逻辑正常,不应出现null的情况
原因
本地缓存采用的是 CaffeineCacheManager,设置的 maximumSize为 1024,而缓存的key比较多时,会频繁出现驱逐key的情况,当并发高时,会存在上面判断获取正常,下面立刻获取时为null的情况
方案
调整maximumSize为预估值
接口不定位置处理慢
问题描述
压测接口偶尔较慢,并且每次慢的位置不定
原因
查看gc情况,发现gc频繁,stw时间长,故是gc导致的接口慢
方案
设置xmn等参数大小
接口响应偶发性不正确
问题描述
接口响应一会正常一会异常,生产环境发生频繁
原因
将缓存取出后对缓存进行了修改,当其它线程使用该缓存时,结果异常;当内存缓存过期重新从redis拉取后,结果又正常,所以现象是不定时接口异常
方案
从内存获取缓存时,响应缓存的clone数据