还是缓存击穿-你管这破玩意叫缓存穿透 (缓存击穿,缓存穿透,缓存雪崩)

教程大全 2025-07-13 11:45:33 浏览

大家好,我是哪吒。

今天分享一下Redis布隆过滤器的原理和应用场景,解决缓存穿透,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。

Redis缓存预热是指在 服务器 启动或应用程序启动之前,将一些数据先存储到Redis中,以提高Redis的性能和数据一致性。这可以减少服务器在启动或应用程序启动时的数据传输量和延迟,从而提高应用程序的性能和可靠性。

(1)数据准备

在应用程序启动或服务器启动之前,准备一些数据,这些数据可以是静态数据、缓存数据或其他需要预热的数据。

(2)数据存储

将数据存储到Redis中,可以使用Redis的列表(list)数据类型或集合(Set)数据类型。

(3)数据预热

在服务器启动或应用程序启动之前,将数据存储到Redis中。可以使用Redis的客户端工具或命令行工具来执行此操作。

(4)数据清洗

在服务器启动或应用程序启动之后,可能会对存储在Redis中的数据进行清洗和处理。例如,可以删除过期的数据、修改错误的数据等。

需要注意的是,Redis缓存预热可能会增加服务器的开销,因此应该在必要时进行。同时,为了减少预热的次数,可以考虑使用Redis的其他数据类型,如哈希表(Hash)或有序集合(Sorted Set)。此外,为了提高数据一致性和性能,可以使用Redis的持久化功能,将数据存储到Redis中,并在服务器重启后自动恢复数据。

@Component@Slf4jpublic class BloomFilterInit{@Resourceprivate RedisTemplate redisTemplate;//初始化白名单数据@PostConstructpublic void init() {//1 白名单客户加载到布隆过滤器String key = "customer:1";//2 计算hashValue,由于存在计算出来负数的可能,我们取绝对值int hashValue = Math.abs(key.hashCode());//3 通过hashValue和2的32次方后取余,获得对应的下标坑位long index = (long)(hashValue % Math.pow(2,32));log.info(key+" 对应的坑位index:{}",index);//4 设置redis里面的bitmap对应类型白名单:whitelistCustomer的坑位,将该值设置为1redisTemplate.opsForValue().setBit("whitelistCustomer",index,true);}}

Redis缓存雪崩是指在缓存系统中,由于某些原因,缓存的数据突然大量地被删除或修改,导致缓存系统的性能下降,甚至无法正常工作。

1、什么情况会发生缓存雪崩?

(1)误删除

由于误操作或故障,缓存系统可能会误删除一些正常的数据。这种情况通常会在数据库中发生。

(2)误修改

由于误操作或故障,缓存系统可能会误修改一些正常的数据。这种情况通常会在数据库中发生。

(3)负载波动

缓存系统通常会承受一定的负载波动,例如,在高峰期间,数据量可能会大幅增加,从而导致缓存系统的性能下降。

(4)数据变化频繁

如果缓存系统中的数据变化频繁,例如,每秒钟都会有大量的数据插入或删除,那么缓存系统可能会因为响应过慢而导致雪崩。

(1)数据备份

定期备份数据,以防止误删除或误修改。

(2)数据同步

定期同步数据,以防止数据不一致。

(3)负载均衡

使用负载均衡器将请求分配到多个Redis实例上,以减轻单个实例的负载。

(4)数据优化

优化数据库结构,减少数据变化频繁的情况。

(5)监控与告警

监控Redis实例的性能指标,及时发现缓存系统的异常,并发出告警。

Redis缓存穿透是指在Redis缓存系统中,由于某些原因,缓存的数据无法被正常访问或处理,导致缓存失去了它的作用。

1、什么情况会发生缓存穿透?

(1)数据量过大

当缓存中存储的数据量过大时,缓存的数据量可能会超过Redis的数据存储限制,从而导致缓存失去了它的作用。

(2)数据更新频繁

当缓存中存储的数据更新频繁时,缓存的数据可能会出现异步的变化,导致缓存无法被正常访问。

(3)数据过期

当缓存中存储的数据过期时,缓存的数据可能会失去它的作用,因为Redis会在一定时间后自动将过期的数据删除。

(4)数据权限限制

当缓存中存储的数据受到权限限制时,只有拥有足够权限的用户才能访问和处理这些数据,从而导致缓存失去了它的作用。

(5)Redis性能瓶颈

当Redis服务器的性能达到极限时,Redis缓存可能会因为响应过慢而导致穿透。

(1)设置合理的缓存大小

根据实际需求设置合理的缓存大小,以避免缓存穿透。

(2)优化数据结构

根据实际需求优化数据结构,以减少数据的大小和更新频率。

(3)设置合理的过期时间

设置合理的过期时间,以避免缓存失去它的作用。

(4)增加Redis的并发处理能力

通过增加Redis的并发处理能力,以提高缓存的处理能力和响应速度。

(5)优化Redis服务器的硬件和软件配置

通过优化Redis服务器的硬件和软件配置,以提高Redis的性能和处理能力。

Redis缓存穿透

四、通过空对象缓存解决缓存穿透

如果发生了缓存穿透,可以针对要查询的数据,在Redis中插入一条数据,添加一个约定好的默认值,比如defaultNull。

比如你想通过某个id查询某某订单,Redis中没有,MySQL中也没有,此时,就可以在Redis中插入一条,存为defaultNull,下次再查询就有了,因为是提前约定好的,前端也明白是啥意思,一切OK,岁月静好。

这种方式只能解决key相同的情况,如果key都不同,则完蛋。

五、Google布隆过滤器Guava解决缓存穿透

com.google.guavaguava23.0
BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 100);

布隆过滤器中添加元素。

bloomFilter.mightContain(1)

判断布隆过滤器中是否存在。

bloomFilter.mightContain(1)
@Service@Slf4jpublic class GuavaBloomFilterService {public static final int SIZE = 1000000;//误判率public static double fpp = 0.01;//创建guava布隆过滤器private static BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(), SIZE, fpp);public void guavaBloomFilter() {for (int i = 1; i <= SIZE; i++) {bloomFilter.put(i);}ArrayList list = new ArrayList<>(10000);for (int i = SIZE + 1; i <= SIZE + (10000); i++) {if (bloomFilter.mightContain(i)) {log.info("被误判了:{}", i);list.add(i);}}log.info("误判总数量:{}", list.size());}}

Redis缓存击穿是指在Redis缓存系统中,由于某些原因,缓存的数据无法被正常访问或处理,导致缓存失去了它的作用。

1、什么情况会发生缓存击穿?

根本原因:热点Key失效。

(1)数据量过大

当缓存中存储的数据量过大时,缓存的数据量可能会超过Redis的数据存储限制,从而导致缓存失去了它的作用。

(2)数据更新频繁

当缓存中存储的数据更新频繁时,缓存的数据可能会出现异步的变化,导致缓存无法被正常访问。

(3)数据过期

当缓存中存储的数据过期时,缓存的数据可能会失去它的作用,因为Redis会在一定时间后自动将过期的数据删除。

(4)数据权限限制

当缓存中存储的数据受到权限限制时,只有拥有足够权限的用户才能访问和处理这些数据,从而导致缓存失去了它的作用。

(5)Redis性能瓶颈

当Redis服务器的性能达到极限时,Redis缓存可能会因为响应过慢而导致击穿。

(1)设置合理的缓存大小

根据实际需求设置合理的缓存大小,以避免缓存穿透。

(2)优化数据结构

根据实际需求优化数据结构,以减少数据的大小和更新频率。

(3)设置合理的过期时间

设置合理的过期时间,以避免缓存失去它的作用。

(4)增加Redis的并发处理能力

通过增加Redis的并发处理能力,以提高缓存的处理能力和响应速度。

(5)优化Redis服务器的硬件和软件配置

通过优化Redis服务器的硬件和软件配置,以提高Redis的性能和处理能力。

通过双检加锁机制。

先更新从缓存B,再更新主缓存A,而且让从缓存B的缓存失效时间长于A,保证A失效时,B还在。


世界上每年有许多森林大火,森林大火应该怎样扑灭?

森林大火很难扑灭,所以以预防为主,但如果发生大火,可以用砍伐周边森林,造隔离带,空中撒水等方法,但在火势过大,人为扑灭很困难的情况下,一般都会选择疏散周边人群,隔离起火地区,让其自行熄灭。

手游神雕侠侣侠客纪杨过传怎么打

把墓碑杀光康塞住三回合,秒掉蛮兵先锋。 我建议,首先打死五阴那玩意,就打掉那一个碑,然后病 生一起打掉,老 爱一起打掉,注意石碑血量,在你觉得扛不住的时候,上述高伤害的要破了,打掉爱就行,记得爱和老一起打,可以先打爱再打老,然后看血量打死,怨,杨过那个求不得苦就在最后,怨出是金轮,千万不要攻击他,差不多了。 这是我的打法,只要第一个先打一个高伤害的,就好,杨过那个求不得苦最好是就在最后,病和生一起破比较好,所以我建议先手第一个破碑死或者五阴比较好

假如没有电脑的文章

时光推进100年,一个世纪以后,电脑终极发展,人类穷尽想象,人人都能用上最为先进的电脑,这个二百多年前发现的玩意会如此影响我们的生活。 有了电脑,多好!终极电脑之断想——就只剩三个按键了 ●没有显示器,只要把开关一开,电脑会通过光线给你制作一个现成的显示器。 它分辨率极高,而且响应时间超快!在墙上,在草地,在水中,甚至在空气中。 ●不会在安静的夜里,在昏黄的蜡烛或者灯下,静静地去读一本拿在手里的书。 ●一百年后的电脑几乎所有的输入方式都可以靠语音和意念来替代键盘,但是一百年后的电脑,还是有可能会挂掉,所以(CTEL+alt+DEL)这三个按键还是要留着…… ●有小学生在作文中如此写道: 1、50年后的电脑可以放在铅笔盒里,在铅笔盒的下层可以放铅笔之类的东西,至于上层,就是键盘,盒盖就是屏幕,鼠标就插在铅笔盒旁边。 2、你在网上购买了一件衣服,多媒体电脑会把衣服传过来;多媒体电脑还是一位医术高明的医生,有病对它说,马上就能恢复身体健康;多媒体电脑是一位高级教师,让它帮你辅导,你的学习成绩一定稳步上升;多媒体电脑还是一位厨师,只要输入原料,就能做出色香味俱全的美味佳肴。 像我这样的编辑,每天往电脑前一坐,就是十几个小时,坐得我腰疼,怀疑是不是得了腰椎间盘突出。 看个电影还好点,要是看篇论文、诗歌什么的,会看得头晕眼花、烦闷欲吐。 这破玩意还放着辐射。 我都担心白细胞就快降到最低值了。 是谁发明的破电脑?没电脑多好!无电脑之断想—看不到芙蓉姐姐了 ●假如没有电脑,我上班就不用噼里啪啦的去敲键盘了,也不用费劲的思考一个字是平舌还是翘舌,前鼻音还是后鼻音了。 想和谁联系的时候,就动手写信,顺便练练书法,(我现在的手写字已经不卒忍读了)还能给邮政局创点收入,你看邮政自从和电信分了家,效益是江河日下啊。 现在,QQ和邮件霸王了我,都让我忘了怎么拿笔了,一写字就像鸡爪子似的,可怜我小学时练了半年的毛笔字功底全军覆没。 几千年的书法文化竟然败给几十年的键盘文化,小编心有不甘啊。 ●假如没有电脑,我去银行存钱取钱再也不用按那6位数的密码了,省得还提心吊胆的怕别人看见。 到时候拿出钱来往柜台上一砸,说:“存块,给大爷记上。 ”然后就可以悠哉悠哉的看着出纳员抱着一摞子账簿记账。 ●假如没有电脑,发射火箭就不用现在这么麻烦了。 到时候先找几个人把火箭抬起来,然后再来个人用打火机点着火,接着总指挥喊:“一、二、三,发射!”那几个人就把火箭扔出去了。 多简单,就三步。 比现在又得检查这个设备又得检查那个程序的省事多了。 ●假如没有电脑,我们就不会看到那么多愤慨的事,也不会看到芙蓉姐姐那些恶心的图片

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐