Redis缓存穿透方案
转自:https://blog.csdn.net/muyi_amen/article/details/80229647
解决Redis缓存穿透方案
缓存技术可以用来减轻数据库的压力,提升访问效率。目前在企业项目中对缓存也是越来越重视。但是缓存不是说随随便便加入项目就可以了。将缓存整合到项目中,这才是第一步。而缓存带来的穿透问题,进而导致的雪蹦问题都是我们迫切需要解决的问题。本篇文章将我平时项目中的解决方案分享给大家,以供参考。
一、缓存穿透的原理
1、先从缓存中取数据,如果能取到,则直接返回数据给用户。这样不用访问数据库,减轻数据库的压力。
2、如果缓存中没有数据,就会访问数据库。
缓存就像是数据库的一道防火墙,将请求比较频繁的数据放到缓存中,从而减轻数据库的压力。 但是如果有人恶意攻击,那就很轻松的穿透你的缓存,将所有的压力都给数据库。比如上图,你缓存的key都是正整数,但是我偏偏使用负数作为key访问你的缓存,这样就会导致穿透缓存,将压力直接给数据库。
二、导致缓存穿透的原因
缓存穿透的问题,肯定是再大并发情况下。依此为前提,我们分析缓存穿透的原因如下:
1、恶意攻击,猜测你的key命名方式,然后估计使用一个你缓存中不会有的key进行访问。
2、第一次数据访问,这时缓存中还没有数据,则并发场景下,所有的请求都会压到数据库。
3、数据库的数据也是空,这样即使访问了数据库,也是获取不到数据,那么缓存中肯定也没有对应的数据。这样也会导致穿透。
如上图所示,解决的步骤如下:
1、再web服务器启动时,提前将有可能被频繁并发访问的数据写入缓存。—这样就规避大量的请求在第3步出现排队阻塞。
2、规范key的命名,并且统一缓存查询和写入的入口。这样,在入口处,对key的规范进行检测。–这样保存恶意的key被拦截。
3、Synchronized双重检测机制,这时我们就需要使用同步(Synchronized)机制,在同步代码块前查询一下缓存是否存在对应的key,然后同步代码块里面再次查询缓存里是否有要查询的key。 这样“双重检测”的目的,还是避免并发场景下导致的没有意义的数据库的访问(也是一种严格避免穿透的方案)。
这一步会导致排队,但是第一步中我们说过,为了避免大量的排队,可以提前将可以预知的大量请求提前写入缓存。
4、不管数据库中是否有数据,都在缓存中保存对应的key,值为空就行。–这样是为了避免数据库中没有这个数据,导致的平凡穿透缓存对数据库进行访问。空值如果太多,也会导致内存耗尽。导致不必要的内存消耗。这样需要给key设置较短的过期时间,避免内存被恶意占满。导致正常的功能不能缓存数据。
5、布隆过滤,查看key是否存在
Redis缓存穿透方案相关推荐
- Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略
1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...
- 布隆过滤器Redis缓存穿透雪崩击穿热点key
目录 布隆过滤器 Redis 缓存 穿透 雪崩 击穿 热点KEY 布隆过滤器 布隆过滤器(判断某个key一定不存在) 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构 特点是高效地插入和查询, ...
- 清空缓存的命令_布隆过滤器应用——解决Redis缓存穿透问题
1. 布隆过滤器 简要介绍布隆过滤器的概念和特点,详细知识请参考几篇参考文献或其它文章. 1.1 概念 简单点说,布隆过滤器本质是一个位数组. 当一个元素加入过滤器时,使用多个hash函数对元素求值, ...
- Redis 缓存穿透、击穿、雪崩现象及解决方案
前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...
- Redis 缓存穿透、缓存击穿和缓存雪崩
目录 Redis 缓存穿透.缓存击穿和缓存雪崩 Redis 缓存穿透(查不到) Redis缓存穿透的解决方案 方案一:接口校验 方案二:缓存空对象 方案三:布隆过滤器 Redis 缓存击穿 Redis ...
- Redis缓存穿透问题及解决方案
Redis缓存穿透问题及解决方案 参考文章: (1)Redis缓存穿透问题及解决方案 (2)https://www.cnblogs.com/lingyejun/p/10087135.html 备忘一下 ...
- 二十七、Redis缓存穿透和雪崩(完)
Redis缓存穿透和雪崩 一.服务的高可用问题 在这里我们不会详细的区分析解决方案的底层! Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中 ...
- Redis缓存穿透、击穿、雪崩及主从复制
文章目录 Redis缓存穿透 概念 解决方案1-布隆过滤器 解决方案2-缓存空对象 缓存击穿 概念 解决方案1-热点数据永不过期 解决方案2-加互斥锁 缓存雪崩 概念 解决方案1-Redis高可用 解 ...
- 布隆过滤器避免redis缓存穿透
缓存穿透及布隆过滤器 Redis的基于缓存,极大地提升了应用程序的性能和效率,特别是数据查询方面,但是也带来了一些问题,比如典型的 缓存穿透.缓存雪崩.缓存击穿. 本篇先讲缓存穿透及其解决办法. (1 ...
最新文章
- 应用YOLOV4 - DeepSort 实现目标跟踪
- 2018/8/27 A Modified PSO Algorithm with Exponential Decay Weight
- Tensorflow |(4)名称域、图 和会话
- RHCS集群理论暨 最佳实践
- linux内核中等待队列
- WinAPI: waveInGetNumDevs - 获取波形输入设备的数目
- [Objective-C] Copy 和 MutableCopy
- Filter的详解与配置应用
- 转向AIOps之前,你应该做好哪些准备?
- python 实现redis订阅发布功能
- java链表list_java自定义List链表
- 用crontab、crond在嵌入式系统中添加定时任务
- Scheme学习系列二:调用C代码
- 苏联W ndows视频,俄罗斯大神win10精简版32位
- linux 类似迅雷下载软件,推荐几个可以替代迅雷的下载软件
- 手机拍照怎么识别文字
- 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
- android商品上架功能实现,Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现...
- 后端开发规范(持续更新中...)
- 浅谈微信三级分销系统的漏洞
热门文章
- transmac使用方法_怎样使用TRANSMAC?如何将Mac的Ttf字体拷贝到PC系统上?
- Hibernate入门经典实例
- 【毕业设计源码】基于uniapp、vue、node的校园闲置二手商城小程序(包远程运行成功)
- 百度翻译API —— 通用文本翻译
- 产品学习(二)——竞品分析
- 时间序列浊度neph画图 python pandas 折线图 大气科学 大气化学 论文作图
- 计算机械效率的公式怎么读,机械效率的计算公式
- 如何确定一个N!末尾有多少个零
- python-docs word自动化插入表格,表格里放图片的办法
- Python对阿里巴巴、谷歌、腾讯等六家公司股票数据进行分析与可视化实战(附源码 超详细)