转自: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缓存穿透方案相关推荐

  1. Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略

    1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...

  2. 布隆过滤器Redis缓存穿透雪崩击穿热点key

    目录 布隆过滤器 Redis 缓存 穿透 雪崩 击穿 热点KEY 布隆过滤器 布隆过滤器(判断某个key一定不存在) 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构 特点是高效地插入和查询, ...

  3. 清空缓存的命令_布隆过滤器应用——解决Redis缓存穿透问题

    1. 布隆过滤器 简要介绍布隆过滤器的概念和特点,详细知识请参考几篇参考文献或其它文章. 1.1 概念 简单点说,布隆过滤器本质是一个位数组. 当一个元素加入过滤器时,使用多个hash函数对元素求值, ...

  4. Redis 缓存穿透、击穿、雪崩现象及解决方案

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...

  5. Redis 缓存穿透、缓存击穿和缓存雪崩

    目录 Redis 缓存穿透.缓存击穿和缓存雪崩 Redis 缓存穿透(查不到) Redis缓存穿透的解决方案 方案一:接口校验 方案二:缓存空对象 方案三:布隆过滤器 Redis 缓存击穿 Redis ...

  6. Redis缓存穿透问题及解决方案

    Redis缓存穿透问题及解决方案 参考文章: (1)Redis缓存穿透问题及解决方案 (2)https://www.cnblogs.com/lingyejun/p/10087135.html 备忘一下 ...

  7. 二十七、Redis缓存穿透和雪崩(完)

    Redis缓存穿透和雪崩 一.服务的高可用问题 在这里我们不会详细的区分析解决方案的底层! Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面.但同时,它也带来了一些问题.其中 ...

  8. Redis缓存穿透、击穿、雪崩及主从复制

    文章目录 Redis缓存穿透 概念 解决方案1-布隆过滤器 解决方案2-缓存空对象 缓存击穿 概念 解决方案1-热点数据永不过期 解决方案2-加互斥锁 缓存雪崩 概念 解决方案1-Redis高可用 解 ...

  9. 布隆过滤器避免redis缓存穿透

    缓存穿透及布隆过滤器 Redis的基于缓存,极大地提升了应用程序的性能和效率,特别是数据查询方面,但是也带来了一些问题,比如典型的 缓存穿透.缓存雪崩.缓存击穿. 本篇先讲缓存穿透及其解决办法. (1 ...

最新文章

  1. 应用YOLOV4 - DeepSort 实现目标跟踪
  2. 2018/8/27 A Modified PSO Algorithm with Exponential Decay Weight
  3. Tensorflow |(4)名称域、图 和会话
  4. RHCS集群理论暨 最佳实践
  5. linux内核中等待队列
  6. WinAPI: waveInGetNumDevs - 获取波形输入设备的数目
  7. [Objective-C] Copy 和 MutableCopy
  8. Filter的详解与配置应用
  9. 转向AIOps之前,你应该做好哪些准备?
  10. python 实现redis订阅发布功能
  11. java链表list_java自定义List链表
  12. 用crontab、crond在嵌入式系统中添加定时任务
  13. Scheme学习系列二:调用C代码
  14. 苏联W ndows视频,俄罗斯大神win10精简版32位
  15. linux 类似迅雷下载软件,推荐几个可以替代迅雷的下载软件
  16. 手机拍照怎么识别文字
  17. 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
  18. android商品上架功能实现,Android仿京东、天猫app的商品详情页的布局架构, 以及功能实现...
  19. 后端开发规范(持续更新中...)
  20. 浅谈微信三级分销系统的漏洞

热门文章

  1. transmac使用方法_怎样使用TRANSMAC?如何将Mac的Ttf字体拷贝到PC系统上?
  2. Hibernate入门经典实例
  3. 【毕业设计源码】基于uniapp、vue、node的校园闲置二手商城小程序(包远程运行成功)
  4. 百度翻译API —— 通用文本翻译
  5. 产品学习(二)——竞品分析
  6. 时间序列浊度neph画图 python pandas 折线图 大气科学 大气化学 论文作图
  7. 计算机械效率的公式怎么读,机械效率的计算公式
  8. 如何确定一个N!末尾有多少个零
  9. python-docs word自动化插入表格,表格里放图片的办法
  10. Python对阿里巴巴、谷歌、腾讯等六家公司股票数据进行分析与可视化实战(附源码 超详细)