redis缓存问题以及锁

缓存穿透

描述:客户端请求数据库/缓存中都不存在的数据,导致每一次请求都要查询数据库,增加数据库压力。
解决: 热点数据预加载并使用布隆过滤器、缓存空对象

缓存击穿

描述: 缓存数据过期的时候,突然产生大量查询请求,导致多次重复查询数据库,增大访问压力
解决: 使用锁来限制请求次数

缓存雪崩

描述:由于宕机或过期导致大量缓存集体失效,导致出现大量的查询数据库请求,可能造成数据库崩溃
解决:
1.热点数据过期时间不要统一,均匀分布
2.做二级缓存,A1、A2,A1过期时间短,A2过期时间长,A1失效查A2
3.使用锁来限制请求次数
4.分布式情况下、均匀分布热点数据

单机锁

setnx、setex
使用jvm提供的Lock
设置过期时间
每个任务开一个守护线程续期/创建UUID存放在ThreadLocal,通过UUID来判断用lua解锁

分布式锁

redisson
存在的问题:如果master加了锁,这时候没来得及同步给slave,master宕机了,就会导致有两个客户端获取锁,可以尝试使用多把锁,有多少个master就申请多少把锁,这些所应该均匀分布到master

Lua解锁模板

if redis.call("get",KEYS[1])==ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容