缓存数据获取为空

问题描述

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数据