1、缓存穿透
问题描述:
缓存命中率降低,客户端请求大量缓存中不存在的key,导致请求直接访问数据
库,数据库压力瞬增
解决方案:
1.将key的value设置为null,并设置较短过期时间。
2.设置白名单:使用bitmaps类型
3.布隆过滤器
4.设置黑名单
2、缓存击穿
问题描述:
缓存中热点key突然过期,导致过多请求直接访问数据库,数据库压力瞬增
解决方案:
1.提前设置key的过期时间,确定其不会在频繁访问时突然过期
2.热点key过期后加上锁,只有缓存中重新加入该key才会打开锁
3.实时监控,发现热点key过期后,及时重新加入
3、缓存雪崩
问题描述:
在极小时间段内,缓存中大量key突然过期,导致过多请求直接访问数据库,数据
库压力瞬增
解决方案:
1.设置多级缓存,nginx缓存+redis缓存,在一个缓存中key大量过期后先访问
别的缓存。
2.为缓存中的key设置过期标识,在key快要过期时,及时更新过期时间。
3.key过期后加上锁,只有缓存中重新加入该key才会打开锁
4.将缓存的过期时间错开
4、分布式锁
在分布式集群系统中,需要用分布式锁来跨越各个系统控制共享资源
redis分布式锁:
1.上锁
2.具体操作
3.释放锁:
(1)、比较uuid,一样才可以释放,否则可能会释放错
(2)、锁到了过期时间,自动释放
4.删除操作(lua脚本保证原子性)