说明
- Redis-13-Redis高并发常见问题
- 主要包括:缓存穿透、缓存击穿、缓存雪崩、分布式锁
- 官方文档:https://redis.io/documentation
- Redis命令参考:http://redisdoc.com/
核心概念
》Redis高并发常见问题包括哪些?
- 缓存穿透
- 高并发反复请求Redis缓存和DB中都不存在的数据,导致DB崩溃
- 缓存击穿
- 是个瞬间状态,当Redis中某个key(热点key)失效的瞬间,高并发反复请求该key,导致全部请求到DB,导致DB崩溃
- 缓存雪崩
- 不明原因导致Redis中大量key瞬间失效,导致DB压力过大从而崩溃
- 分布式锁
》解决方案
- 缓存穿透
- 对空值缓存
- 设置白名单(使用Bitmaps)
- 布隆过滤器(Bloom Filter)
- 实时监控Redis
- 缓存击穿
- 预先设置热点数据
- 实时调整热点key过期时间
- 使用锁。先锁住(setnx)而不是立即去查DB
- 缓存雪崩
- 构建多级缓存(NGINX+Redis+其他)
- 使用锁或队列
- 设置过期标志(提前量),借助其他线程或服务监控过期标志提前触发更新缓存
- 分散缓存失效时间,避免集中失效
- 分布式锁
- 使用setnx
- 注意:使用时避免死锁,需要设置过期时间
- 注意:使用时避免设置了锁但还未设置过期时间时崩溃导致死锁问题,可以使用如下命令:
set k v ex 60 nx
,加锁的同时设置过期时间
》其他问题
- 如何防止分布式锁误删?
- 误删触发场景:比如A进程上锁后进程卡死导致锁过期了还没触发释放,然后B进程进来了进行了加锁,A进程恢复后将B进程的锁释放
- 解决方案:加锁时设置UUID,释放时进行判断UUID是否相等