大家好,我是哪吒。
今天分享一下Redis布隆过滤器的原理和应用场景,解决缓存穿透,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。
一、缓存预热Redis缓存预热是指在服务器启动或应用程序启动之前,将一些数据先存储到Redis中,以提高Redis的性能和数据一致性。这可以减少服务器在启动或应用程序启动时的数据传输量和延迟,从而提高应用程序的性能和可靠性。
【资料图】
1、缓存预热常见步骤(1)数据准备在应用程序启动或服务器启动之前,准备一些数据,这些数据可以是静态数据、缓存数据或其他需要预热的数据。
(2)数据存储将数据存储到Redis中,可以使用Redis的列表(List)数据类型或集合(Set)数据类型。
(3)数据预热在服务器启动或应用程序启动之前,将数据存储到Redis中。可以使用Redis的客户端工具或命令行工具来执行此操作。
(4)数据清洗在服务器启动或应用程序启动之后,可能会对存储在Redis中的数据进行清洗和处理。例如,可以删除过期的数据、修改错误的数据等。
需要注意的是,Redis缓存预热可能会增加服务器的开销,因此应该在必要时进行。同时,为了减少预热的次数,可以考虑使用Redis的其他数据类型,如哈希表(Hash)或有序集合(Sorted Set)。此外,为了提高数据一致性和性能,可以使用Redis的持久化功能,将数据存储到Redis中,并在服务器重启后自动恢复数据。
2、代码实现@Component@Slf4jpublic class BloomFilterInit{ @Resource private RedisTemplate redisTemplate; //初始化白名单数据 @PostConstruct public 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的坑位,将该值设置为1 redisTemplate.opsForValue().setBit("whitelistCustomer",index,true); }}
二、缓存雪崩Redis缓存雪崩是指在缓存系统中,由于某些原因,缓存的数据突然大量地被删除或修改,导致缓存系统的性能下降,甚至无法正常工作。
1、什么情况会发生缓存雪崩?(1)误删除由于误操作或故障,缓存系统可能会误删除一些正常的数据。这种情况通常会在数据库中发生。
(2)误修改由于误操作或故障,缓存系统可能会误修改一些正常的数据。这种情况通常会在数据库中发生。
(3)负载波动缓存系统通常会承受一定的负载波动,例如,在高峰期间,数据量可能会大幅增加,从而导致缓存系统的性能下降。
(4)数据变化频繁如果缓存系统中的数据变化频繁,例如,每秒钟都会有大量的数据插入或删除,那么缓存系统可能会因为响应过慢而导致雪崩。
2、Redis缓存集群实现高可用主从 + 哨兵Redis集群开启Redis持久化机制aof/rdb,尽快恢复缓存集群。3、如何避免Redis缓存雪崩?(1)数据备份定期备份数据,以防止误删除或误修改。
(2)数据同步定期同步数据,以防止数据不一致。
(3)负载均衡使用负载均衡器将请求分配到多个Redis实例上,以减轻单个实例的负载。
(4)数据优化优化数据库结构,减少数据变化频繁的情况。
(5)监控与告警监控Redis实例的性能指标,及时发现缓存系统的异常,并发出告警。
三、缓存穿透Redis缓存穿透是指在Redis缓存系统中,由于某些原因,缓存的数据无法被正常访问或处理,导致缓存失去了它的作用。
1、什么情况会发生缓存穿透?(1)数据量过大当缓存中存储的数据量过大时,缓存的数据量可能会超过Redis的数据存储限制,从而导致缓存失去了它的作用。
(2)数据更新频繁当缓存中存储的数据更新频繁时,缓存的数据可能会出现异步的变化,导致缓存无法被正常访问。
(3)数据过期当缓存中存储的数据过期时,缓存的数据可能会失去它的作用,因为Redis会在一定时间后自动将过期的数据删除。
(4)数据权限限制当缓存中存储的数据受到权限限制时,只有拥有足够权限的用户才能访问和处理这些数据,从而导致缓存失去了它的作用。
(5)Redis性能瓶颈当Redis服务器的性能达到极限时,Redis缓存可能会因为响应过慢而导致穿透。
2、如何避免Redis缓存穿透?(1)设置合理的缓存大小根据实际需求设置合理的缓存大小,以避免缓存穿透。
(2)优化数据结构根据实际需求优化数据结构,以减少数据的大小和更新频率。
(3)设置合理的过期时间设置合理的过期时间,以避免缓存失去它的作用。
(4)增加Redis的并发处理能力通过增加Redis的并发处理能力,以提高缓存的处理能力和响应速度。
(5)优化Redis服务器的硬件和软件配置通过优化Redis服务器的硬件和软件配置,以提高Redis的性能和处理能力。
Redis缓存穿透
四、通过空对象缓存解决缓存穿透如果发生了缓存穿透,可以针对要查询的数据,在Redis中插入一条数据,添加一个约定好的默认值,比如defaultNull。
比如你想通过某个id查询某某订单,Redis中没有,MySQL中也没有,此时,就可以在Redis中插入一条,存为defaultNull,下次再查询就有了,因为是提前约定好的,前端也明白是啥意思,一切OK,岁月静好。
这种方式只能解决key相同的情况,如果key都不同,则完蛋。
五、Google布隆过滤器Guava解决缓存穿透1、引入pom com.google.guava guava 23.0
2、创建布隆过滤器BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(), 100);
布隆过滤器中添加元素。
bloomFilter.mightContain(1)
判断布隆过滤器中是否存在。
bloomFilter.mightContain(1)
3、fpp误判率@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缓存击穿是指在Redis缓存系统中,由于某些原因,缓存的数据无法被正常访问或处理,导致缓存失去了它的作用。
1、什么情况会发生缓存击穿?根本原因:热点Key失效。
(1)数据量过大当缓存中存储的数据量过大时,缓存的数据量可能会超过Redis的数据存储限制,从而导致缓存失去了它的作用。
(2)数据更新频繁当缓存中存储的数据更新频繁时,缓存的数据可能会出现异步的变化,导致缓存无法被正常访问。
(3)数据过期当缓存中存储的数据过期时,缓存的数据可能会失去它的作用,因为Redis会在一定时间后自动将过期的数据删除。
(4)数据权限限制当缓存中存储的数据受到权限限制时,只有拥有足够权限的用户才能访问和处理这些数据,从而导致缓存失去了它的作用。
(5)Redis性能瓶颈当Redis服务器的性能达到极限时,Redis缓存可能会因为响应过慢而导致击穿。
2、如何避免Redis缓存击穿?(1)设置合理的缓存大小根据实际需求设置合理的缓存大小,以避免缓存穿透。
(2)优化数据结构根据实际需求优化数据结构,以减少数据的大小和更新频率。
(3)设置合理的过期时间设置合理的过期时间,以避免缓存失去它的作用。
(4)增加Redis的并发处理能力通过增加Redis的并发处理能力,以提高缓存的处理能力和响应速度。
(5)优化Redis服务器的硬件和软件配置通过优化Redis服务器的硬件和软件配置,以提高Redis的性能和处理能力。
七、Redis缓存击穿解决方案1、互斥更新通过双检加锁机制。
2、差异失效时间先更新从缓存B,再更新主缓存A,而且让从缓存B的缓存失效时间长于A,保证A失效时,B还在。
本文转载自微信公众号「哪吒编程」,可以通过以下二维码关注。转载本文请联系哪吒编程公众号。
关键词:
-
你管这破玩意叫缓存穿透?还是缓存击穿? 环球微动态
大家好,我是哪吒。今天分享一下Redis布隆过滤器的原理和应用场景,解决缓存穿透,实现快速入门,丰富个人
-
马克龙官宣 超110亿元中法合资
据路透社5月12日报道,法国总统埃马纽埃尔·马克龙12日表示,中国厦门厦钨新能源材料股份有限公司计划与法
-
环球快资讯丨4月19日中芯概念板块涨幅达2%
4月19日11点8分,中芯概念板块指数报1243 935点,涨幅达2%,成交268 01亿元,换手率1 41%。板块个股中,涨
-
武当文化概论
1、《武当文化概论》是2008年1月1日社会科学文献出版社出版的图书,作者是杨立志。2、该书首次界定了武当文
-
环球短讯!农民断缴新农合应制止
文|承爱编辑|大宇在阅读此文前,诚邀您点击一下“关注”,既方便您进行讨论与分享,又给您带来不一样的参与
-
环球焦点!吃海鲜不能喝什么酒_吃海鲜
1、孕妇吃海鲜是有忌讳的。2、你一定要这样吃才可以:第一、怀孕早期,螃蟹坚决不能吃。3、特别强调的是螃蟹
-
世界头条:关于成长的诗歌_关于成长的诗歌有哪些
欢迎观看本篇文章,小升来为大家解答以上问题。关于成长的诗歌,关于成长的诗歌有哪些很多人还不知道,现在
-
新款柯米克迎来上市!升级优化,加量不加价,网友:不火都难
进入5月后,各大车企推新换代的速度依旧没有减缓。而在众多新车当中,也不乏很多性价比高且具备不俗产品力
-
宝骏悦也SUV实车上路:越野MINI版 整条街最亮眼的崽
宝骏悦也SUV实车上路:越野MINI版整条街最亮眼的崽
-
复方穿心莲片说明书图片 复方穿心莲片说明书
今天来聊聊关于复方穿心莲片说明书图片,复方穿心莲片说明书的文章,现在就为大家来简单介绍下复方穿心莲片
-
北京民族大学官网登录入口_北京民族大学官网-焦点快播
1、你好,我有同学在这所学校,学校取得的学历是国家非国民教育系列的全日制学历。2、国家教育网上无电子注
-
经纪人回应划水争议,歌手刘维发文质问团队,该叫徐怀钰团队划水
《乘风2023》第一次公演结束了,上半场播出完之后,争议立马出现。其中,最大的争议非徐怀钰莫属。在《乘风
-
2023年电商概念股一览(附股)
2023年电商概念股一览(附股),截至5月14日,A股涉及电商的上市公司具体分布情况为:主板的有68家、中小板的
-
世界热头条丨禾望电气: 深圳市禾望电气股份有限公司2022年年度权益分派实施公告
禾望电气:深圳市禾望电气股份有限公司2022年年度权益分派实施公告
-
经营活动产生的现金流量净额下降说明什么_经营活动产生的现金流量
1、经营活动现金流量是销售商品提供劳务收到的现金、收到到的其他与经营活动有关的现金、购买商品、接受劳
-
今日快讯:“智慧交警平台”上线保畅通
交警智慧指挥系统平台实时监测解放路与城中路交叉路口人流量,一旦发现人流量超过负荷,指挥中心的值班民
-
刚刚怀孕的孕妇可以吃鸭肉吗 天天快看点
关于刚刚怀孕的孕妇可以吃鸭肉吗的内容,包含刚怀孕的孕妇可以吃鸭腿吗孕妇早期可以吃鸭肉吗怀孕后孕妇能吃
-
请注意!江苏省肿瘤医院住院患者陪护/探视有新变化|全球微速讯
今天(5月14日),记者从江苏省肿瘤医院获悉,为有效加强住院病区陪护 探视人员管理,维护医院正常诊疗秩序
-
【全球速看料】四川雅安建设大数据产业基地
原标题:四川雅安建设大数据产业基地经济日报成都5月13日讯(记者钟华林)四川雅安市近年来加快建设大数据
-
第七届中国空天动力联合大会苏州召开 视焦点讯
工人日报-中工网记者王维砚通讯员唐明军徐阳韩其琪5月10日~5月13日,第七届中国空天动力联合大会(苏州专场