redis使用大概问题链
创始人
2025-05-31 11:32:09
0

雪崩:大量key同时失效 击穿:大量请求的某个key失效 穿透:缓存和数据库都不存在

  • 缓存没有过期时间资源耗尽
    –过期时间

  • 大量数据同时设置缓存,那么会同时失效,此时会击穿数据库 (缓存击穿(巧记:只打穿了缓存))
    –过期时间随机
    –失效后再被请求可在延时一段时间失效

  • 有个数据数据库也被干掉了,大量请求过来后,穿透缓存和数据库(缓存穿透巧记:缓存和数据库都被穿‘透’了)
    –数据库没查到,设置一个短时间过期的‘空的业务数据’到缓存中
    –布隆过滤器

  • 突发性热点缓存重建导致系统压力暴增(例如:冷门商品321上连接大量请求到缓存没有查到,同时去查数据库,又同时设置缓存(缓存重建))
    –提前缓存(但是要提前预知热点数据 难预知、例如热搜)
    –重建缓存时加锁(但是锁中要先查一遍缓存,DCL机制)

String cache = redisUtil.get("xxx:xxx:key");if(Objects.noNull(cache)) {if(EMPTY_CACHE.equals(cache)) {//空业务数据return null;}return JsonUtil.parse(cache);}synchronized(this) {//再次查询缓存,DCL机制String cache = redisUtil.get("xxx:xxx:key");if(Objects.noNull(cache)) {if(EMPTY_CACHE.equals(cache)) {//空业务数据return null;}return JsonUtil.parse(cache);}Object = dataDao.selectForDB(key);if(Objects.noNull(cache)) {redisUtil.set(key, json.tojsonstr(), );} else {//业务空数据redisUtil.set(key, json.tojsonstr(), );}}	
  • 加锁的对象有问题,this一般是对应Service的单例,性能极其低,所以应该以资源id为锁
    –Map对象资源池去做锁(内存泄露问题,jvm级别的)
    –分布式锁setnx

  • 缓存双写不一致
    –设置、更新 缓存数据时,也去加分布式锁(设置说明肯定是查询了没有才设置哦,所以这个就是让查询和更新串行了)

  • 串行性能低,咋搞(一般都是读多写少的)
    –分布式读写锁,不阻塞读线程

相关内容

热门资讯

“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...
绝不允许日本军国主义幽灵复活!... 2025年11月7日,日本首相高市早苗宣称,如果中国大陆对台湾出动军舰并使用武力,可能会构成“存亡危...
【解决】AI法律助手荣获202... 2025全球数字经济大会启幕,搭建国际数字合作高端平台 经国务院批准,由北京市人民政府、国家互联网信...
嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...
家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...