前言
简单记录一下Redis 缓存穿透、缓存击穿、缓存雪崩概念及基本学习提示:以下是本篇文章正文内容,下面案例可供参考
一、Redis 缓存穿透
解释:
当一个破坏者访问数据时,访问数据每次Redis中没有数据,从而访问Mysql数据库,导致Redis使用效果不明显,Mysql压力增大,形成缓存穿透。
解决办法:
1、对空值缓存 设置个时间 多次访问 Redis中没有数据,设置空值
2、设置可访问的白名单
3、布隆过滤器
4、进行实时监控,当发现Redis命中率急速降低,设置黑名单
二、Redis 缓存击穿
解释:
比如:Redis中某个key值过期,用户大量访问,导致数据蜂拥而至Mysql数据库。
解决办法:
1、预先设置“热门”数据,加大key时长
2、实时调整,现场查看,适时调整key有效期
3、使用锁
三、Redis 缓存雪崩
解释:
极少时间,key大量过期
解决办法:
1、构建多级缓存架构 nginx + redis + 其他缓存
2、设置锁或队列
3、设置过期标志更新缓存
4、将缓存失效时间分散开
四、分布式锁
1、基于数据库实现分布式锁
2、基于Redis实现 性能最高
3、基于zookeeper实现 可靠性最高
设置锁和过期时间
#上锁
setnx key value
#释放锁
del key
#上锁+设置过期时间 nx 上锁 ex 过期时间 10 秒
set key 20 nx ex 10
UUID防止误删
LUA保证删除原子性