Redis中缓存穿透/击穿/雪崩问题和解决方法
缓存穿透是指用户想查询一个数据,发现Redis中没有,也就是缓存没有命中,就向持久性数据库发起查询,发现数据库也没有这个数据,于是查询失败了。
当用户请求很多的情况下,缓存没有命中,数据库也没有数据,会给数据库造成很大的压力,这就是缓存穿透。
第一种解决方案:使用布隆过滤器
使用布隆过滤器之后,将存储的数据放入布隆过滤器中,每次数据查询首先查询布隆过滤器,当在过滤器中判断存在时,再到缓存查询,如果没有,再进入数据查询。
如果在布隆过滤器中不存在,则直接返回告诉用户该数据查不到,这样能大大减轻数据库查询压力。
第二种方案:缓存空对象
当数据库数据不存在时,将返回的空对象缓存起来,同时设置一个过期时间,之后在访问数据时,将从缓存中获取,从而保护了数据库。
存在问题:
对空值设置过期时间,会存在更新数据库数据到缓存数据失效的这一段时间,缓存数据有问题(问题在于缓存的空对象数据,由于还没有过期,但此时数据库数据已经更新了),会对要保证数据一致性的业务造成影响。会需要更多的空间来存储更多的控制,造成内存中有大量的空值的键。
2. 缓存击穿 量太大,缓存过期缓存击穿是指一个热点key,在不停的扛着大量的并发,当key在失效的瞬间,持续的大并发就会穿破缓存,直接请求到数据库。对数据库造成瞬间压力过大。
第一种方案:热点数据永不过期
从缓存角度看,没有设置过期时间,就不会存在缓存过期之后产生的问题。
第二种方案:加互斥锁
使用分布式锁,保证对每个key的访问同一时刻只能一个线程去查询后端服务,其他没有获取锁权限的线程则等待即可。
3. 缓存雪崩缓存雪崩是指在某一个时间段,缓存集中过期失效或者Redis宕机
对于数据库而言,所有请求压力会全部到达数据库,导致数据库调用量暴增,可能也造成数据库宕机的情况
第一种方案(预防为主):Redis采用高可用
这种方案的思路就是集群使用,即使一个redis挂掉,其他redis还可以继续服务。
第二种方案(降低发生时所造成的危害):限流降级
这种思路就是在缓存失效后,通过加锁或者队列来控制读取数据库的线程数量让线程在队列排队,控制整体请请求速率。
第三种方案:数据预热
数据预热即是在正式部署服务之前,先访问一遍数据,可以将大部分的数据加载到缓存中,在即将发生大并发之前已经加载不同的key,设置不同的过期时间,让缓存失效的时间更加均匀。
到此这篇关于Redis中缓存穿透/击穿/雪崩问题和解决方法的文章就介绍到这了,更多相关Redis缓存穿透/击穿/雪崩问题内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Redis中缓存穿透/击穿/雪崩问题和解决方法
相关文章
- Redis中文官网:开启数据库之旅(redis中文官网)
- Redis灵活删除缓存,精简空间(redis删除缓存)
- Redis关闭RDB:危险操作(redis关闭rdb)
- Redis应用于抢单场景,提高交易效率(redis抢单)
- Redis:为何成为云计算中不可或缺的缓存工具?(redis好处)
- 开启Redis之旅,提升系统效率(缓存引擎redis)
- 查看Redis账户登录状态的实践(查redis的登录状态)
- 清理Redis缓存如何高效实现(清redis缓存怎么执行)
- 为项目增添更快速之缓存系统Redis实现(为项目添加redis缓存)
- 关机后Redis缓存的转变之路(关机redis缓存)
- 利用Redis精准实现数据排重(利用redis 数据排重)
- Redis魔方视频教程双手轻松掌握缓存技术(redis魔方视频教程)
- 高效率利用Redis实现高并发缓存更新(redis高并发缓存更新)
- 如何拿到Redis面试职位了解重点知识(redis面试知识题)
- 分析Redis集群的需求与实现(redis集群需求分析)
- 构建稳定可靠的Redis集群实现节点上下线(redis集群节点上下线)
- 加速系统让Redis集成缓存成为可能(redis集成缓存)
- Redis安全远程代码执行风险警示(redis远程代码执行)
- Redis最全面且简单易行的缓存方案(redis说法正确的是)
- Redis实现访问与读写同步(redis访问读写同步)
- 校验尽显效能利用Redis实现输入校验(redis输入)
- Redis缓存支撑千万数据运转(redis缓存千万数据)