2023-06-23:redis中什么是缓存击穿?该如何解决?|环球即时

2023-06-23:redis中什么是缓存击穿?该如何解决?

答案2023-06-23:

缓存击穿是指一个缓存中的热点数据非常频繁地被大量并发请求访问,当该热点数据失效的瞬间,持续的大并发请求无法通过缓存获取到数据,而直接访问数据库,这就好像在一个稳固完好的容器上打开了一个洞。


(相关资料图)

解决缓存击穿问题的方法包括:

1.设置热点数据永不过期:将热点数据的缓存过期时间设置为较长的时间,甚至是永不过期。这确保即使缓存失效,该数据仍然可用,从而绕过了缓存击穿的问题。然而,这种方法可能导致缓存数据过期不及时的问题,使得数据不够及时和准确。

2.使用互斥锁(Mutex):在数据失效时,当有新请求到来时,可以通过设置互斥锁来保护数据库访问过程。如果某个请求已经获取到了锁,其他请求则需要等待,直到获取到锁为止。这样可以避免大量并发请求同时访问数据库,减轻数据库的压力。然而,使用互斥锁可能导致并发性能下降和请求等待时间增加的问题,需要权衡考虑。

使用互斥锁

业界常用的做法是使用互斥锁(Mutex)。简单地说,当缓存失效时(即获取的值为空),不会立即去从数据库加载数据,而是通过缓存工具的某些带有成功操作返回值的方法(例如Redis的SETNX)来设置一个互斥锁键(Mutex Key)。如果该操作返回成功,表示当前线程获得了互斥锁,然后可以继续执行加载数据的操作,并将数据回写至缓存;否则,它将重试整个获取缓存的方法。

伪代码如下图:

永远不过期

这里的“永远不过期”包含两层意思:

(1) 在Redis等缓存工具中,确实可以将某些热点key的过期时间设置为永不过期,即不设置过期时间。这样可以确保热点数据在缓存中一直存在,避免了热点key过期的问题,实现了“物理”不过期。

(2) 为了保证缓存的实时性和更新能力,虽然在"物理"上不过期,但可以将过期时间的信息存储在key对应的value中。当发现数据即将过期时,可以通过后台的异步线程来进行缓存的构建或更新,这样实现了"逻辑"过期。这样的策略能够确保缓存在一定时间内保持有效,并在过期前进行更新,使数据保持最新。

从实际应用的角度来看,这种缓存策略对性能非常友好。它唯一的缺点是在构建缓存期间,其他线程(非构建缓存的线程)可能访问到旧的数据。然而,对于一般的互联网应用功能而言,这个问题是可以容忍的。

标签:

x 广告
潜山市源潭中心小学举办暑期防溺水安全知识科普讲座

夏季是溺水事故的高发期,为进一步增强学生的自护意识,预防溺水事故的

火线侦察兵:多方共振 中期反转行情可期

《天下财经》发现价值,做您的投资好帮手。关注BRTV《天下财经》精彩内

公安部:严厉打击跨国跨境海上走私毒品犯罪活动

公安部今天(21日)召开新闻发布会,通报全国公安禁毒部门工作成效。在

假期第一天,鄂尔多斯这2个景区受到央视关注_微速讯

今天(6月23日),央视CCTV-13《朝闻天下》报道了鄂尔多斯万家惠水世界

全球今日报丨突发!6月23日某光伏企业发生火灾

‍光伏资讯|PV-info近日【光伏资讯】微信公众号(PV-info)了解到,6月

全球视讯!总有刁民想害朕

今天是端午节,有人说端午节是恶节,所以不能说端午节快乐,其实查了古

粉蒸茼蒿的家常做法(而且非常适合老年人和孕妇食用)

介绍粉蒸茼蒿粉蒸茼蒿是一道传统的家常菜,主要食材是茼蒿和粉丝,非常

中国旅游研究院:端午假期预计旅游人次达1亿

6月21日电中国旅游研究院最新预测显示,今年端午假期旅游人次有望突破2

环球动态:最高地表温度71.8℃!北京市教委:可据实际减课或停课

截至今天14时,南郊观象台气温已达40℃。市气象台首席预报员张迎新表示

​​​​​​​我的高考|学习是生活的一部分,休息和努力同等重要_每日速看

今年参加高考的学子,从初三中考到进入高中,恰恰也经历了三年新冠疫情

x 广告

Copyright ©  2015-2023 亚洲都市网版权所有  备案号:京ICP备2021034106号-51   联系邮箱:5 516 538 @qq.com