缓存穿透:是指当大量请求在缓存中去查询一个不存在的值的时候,查询会直接落到数据库,给数据库服务带来很大的压力。
解决方式:在缓存中查到即使返回值为null的结果值,也把null值写回缓存
缓存中存在大量的key值,占用内存
解决方式1:设置key的TTL
解决方式2:设置hash散列来维护key
缓存雪崩:当缓存的所有的key的TTL在同一时间失效,那么所有的查询请求都会落到数据库,造成服务不能工作
解决方式:可以给key设置随机的TTL,避免所有的key都在同一时间过期。
ps:随机数
Long timeOut = RandomUtils.nextLong(10, 30);
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>