使用redis的原因,缓存穿透和缓存雪崩

本文探讨了使用Redis而非Map的原因,以及如何应对缓存穿透和缓存雪崩的问题。Redis作为分布式缓存,提供了持久化能力和高可用性,避免了多实例下缓存重复存储的问题。文章还介绍了通过布隆过滤器和合理的过期策略防止缓存穿透和雪崩,确保数据库稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用redis的原因,缓存穿透和缓存雪崩

为什么使用redis而不使用map?

map是本地缓存,随着jvm关闭而销毁,多实例时每个实例都要保存一份缓存。而redis是分布式缓存,多实例下只保存一份缓存,且提供持久化,即使服务器宕机数据也不会消失。

缓存穿透

访问大量没有做缓存的数据,导致大量请求落到数据库,数据库崩溃。

解决方案:将所有存在的数据装入一个bitmap或者布隆过滤器中,一开始就把不存在数据的请求过滤掉,还可以查询数据库时无论数据存在还是不存在,都缓存一份空,这样短期内再访问就不会进入数据库了。

缓存雪崩

缓存同一时间大面积失效,导致很多请求落到数据库上导致数据库崩溃。

解决方案:

首先要设置合理的过期策略,过期时间通常要设置为固定时间+随机时间。

其次要保证redis集群的高可用性,选择合适的持久化策略,使恢复的redis重新加载缓存。用本地的java缓存框架做缓存,请求先取java中的缓存,然后再查redis,如果都没有再查数据库。用限流组件来保证落到数据库的请求在一个合理的范围内,这样就能保证一部分用户使用正常,也能保证数据库不崩溃。被限流组件过滤掉的返回一个设计好的默认值或者提示。

转载于:https://www.cnblogs.com/shizhuoping/p/11526283.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值