1.springboot2.x集成redis底层使用的是netty,会出现堆外内存,所以要使用jedis
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <!-- Lettuce的bug导致netty堆外内存溢出 切换使用jedis--> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <!-- Lettuce的bug导致netty堆外内存溢出 切换使用jedis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> |
2.缓存穿透
问题:利用一个数据库不存在的数据进行攻击,数据库瞬间压力增大,导致崩溃。
解决:null结果缓存,并加入短暂过期时间。
3.缓存雪崩
问题:缓存过期时间一致,导致缓存同一时间段过期,请求全部放到数据库,数据库暑假按压力过大崩溃。
解决:原有失效时间基础上加一个随机值。
4.缓存击穿
问题:热点数据缓存失效时大量请求提交,数据库压力过大崩溃。
解决:加锁。