/**
* TODO 产生堆外内存溢出 OutOfDirectMemoryError
* 1、SpringBoot2.0以后默认使用 Lettuce作为操作redis的客户端,它使用 netty进行网络通信
* 2、lettuce 的bug导致netty堆外内存溢出,-Xmx300m netty 如果没有指定堆内存移除,默认使用 -Xmx300m
* 可以通过-Dio.netty.maxDirectMemory 进行设置
* 解决方案 不能使用 -Dio.netty.maxDirectMemory调大内存 这样只是减缓内存溢出的时间。
* 1、升级 lettuce客户端,2、 切换使用jedis
* redisTemplate:
* lettuce、jedis 操作redis的底层客户端,Spring再次封装
* @return
*/
开发时可以先用jedis解决,等项目上线后就可以用升级 lettuce客户端方式解决。
加锁不正确引起时序问题
原因:因为将结果放入缓存需要时间,而在这个时间内又有一个线程进入锁内,查询到缓存中没有数据,这样就会造成多次查询数据库。
解决方法,将结果放入缓存中的操作也加进锁内