* 1、spring boot 2.0 以后默认使用Lettuce作为操作redis的客户端,它使用netty进行网络通信
* 2、Lettuce的bug导致netty堆外内存溢出 如果netty没有指定堆外内存,默认使用 -Xmx 512m
* 可以通过-Dio.netty.maxDirectMemory进行设置
* 解决方案:(不能使用-Dio.netty.maxDirectMemory只去调大堆外内存。)
* 1、升级Lettuce客户端
* 2、切换使用jedis
* RedisTemplate ---> Lettuce,jedis再次封装RedisTemplate
* @return:
* @parm:
*/
@Autowired
StringRedisTemplate stringRedisTemplate;
synchronized (this) {
String json = stringRedisTemplate.opsForValue().get("queryUserTaskJSON");
if (!StringUtils.isBlank(json)){
return JsonUtils.parseObject(json, new TypeReference<List<T>>() {
});
}
List<T> list = new ArrayList<>();
String toJsonString = JsonUtils.toJsonString(list);
stringRedisTemplate.opsForValue().set("queryUserTaskJSON",toJsonString,7, TimeUnit.DAYS);
return list;
}