1、 缓存穿透
- 原因:总是查询不存在的数据,当大量请求不存在的数据时,最终请求会落在数据库上会给数据库带来很大压力。
- 解决办法:设置返回空对象,而不是返回null,这样请求不会大量落在数据库上。
2、缓存击穿
- 原因:大量请求访问同一份热点数据,刚好遇到热点数据即将过期,大量请求最终落在数据库上。
- 解决办法:1、设置热点数据永不过期 2、加锁操作,当一个线程访问数据之后重建缓存。
3、缓存雪崩
- 原因:1、可能是大量请求刚好遇到大量的key同时过期 2、可能是Redis服务器宕机
- 解决办法:1、给缓存数据过期时间附加随机值,避免大量的数据同时失效 2、构建高可用的Redis集群,避免单机宕机导致服务不可用。