Redis的缓存穿透+解决方案

1.缓存穿透现象介绍

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。

常见的解决方案有两种:

  • 缓存空对象
  • 优点:实现简单,维护方便
  • 缺点:
    • 额外的内存消耗
    • 可能造成短期的不一致
  • 布隆过滤
  • 优点:内存占用较少,没有多余key
  • 缺点:
    • 实现复杂
    • 存在误判可能

2.方法具体解决思路

缓存空对象思路分析:当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据,此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据库能够承载的并发不如redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis中去,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了

Redis的缓存穿透+解决方案

布隆过滤:布隆过滤器其实采用的是哈希思想来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,

假设布隆过滤器判断这个数据不存在,则直接返回

这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突

Redis的缓存穿透+解决方案

Original: https://www.cnblogs.com/sy2022/p/16617932.html
Author: 你会很厉害的
Title: Redis的缓存穿透+解决方案

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593721/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 面试官:什么是脚手架?为什么需要脚手架?常用的脚手架有哪些?

    微服务本身是一种架构风格,也是指导组织构建软件的一系列最佳实践集合。然而,业务团队在拆分应用后,会产生更多细粒度服务,并面临这些服务在分布式网络环境中的复杂性。如何专心实现业务逻辑…

    Java 2023年5月29日
    066
  • SpringBoot 源码解析 (三)—– Spring Boot 精髓:启动时初始化数据

    在我们用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求 ,针对这种需求 spring boot为我们提供了以下几种方案供我们选择: <s…

    Java 2023年5月29日
    074
  • 线程同步的情景之二

    情景二:数量有限,先到先得 情景简介:与情景一类似,但是这次茅坑的数量不只一个。如果有需求的人数少于茅坑数量,那一切都很和谐。但是人数超过茅坑数量的时候该怎么办?多个人占用一个坑?…

    Java 2023年5月30日
    085
  • springboot增加content-length

    package com.tianrang.vcc.controller.filter; import org.springframework.boot.web.servlet.Fi…

    Java 2023年5月30日
    0176
  • MySQL版本引起的错误

    接上一篇帖子,博主在CentOS上安装了最新版的MySQL容器(版本为8.0.19),在使用本地springBoot项目连接,启动项目后操作登录系统时报错。 请看代码: com.m…

    Java 2023年6月7日
    0121
  • 从wav到Ogg Opus 以及使用java解码OPUS

    PCM 自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。 采样率 采样频…

    Java 2023年5月29日
    067
  • rocketmq 如何保证顺序消费

    rocketMQ 为了保证 consumer 顺序消费,做了很多工作。 MQClientManager 在 jvm 进程中是单例,其内部维护一个 map,键是 clientId,值…

    Java 2023年5月30日
    051
  • Eureka使用总结

    关于Eureka: 提供基于 REST的服务,在集群中主要用于服务管理。使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka主要维护这些服务的列…

    Java 2023年6月13日
    067
  • VS Code摸鱼神器,让你快速开发AI模型

    摘要:ModelArts VS Code插件一键接入云上开发环境介绍及操作指导 对于习惯于使用本地VS Code IDE的开发者,受限于本地资源,采用本地开发加云上调测的 远程开发…

    Java 2023年6月15日
    077
  • 编程入门之日志聚合系统

    (关心具体部署的同学,可以移步我的另外一篇《Centos部署Loki日志聚合系统 》https://www.cnblogs.com/uncleguo/p/15975647.html…

    Java 2023年6月15日
    061
  • 十二、线程介绍

    进程是资源管理的最小单位,那么每个进程 都拥有自己的数据段、代码段和堆栈段。 这必然就造成了进程在进行切换时都需要有比较复杂的上下文切换等动作,因为要保存当前进程上下文的内容, 还…

    Java 2023年5月30日
    086
  • springboot线程

    (1)确保只有一个线程调用这个方法并且确保只创建一个HotSpot VM实例。因为HotSpot VM创建的静态数据结构无法再次初始化,所以一旦初始化到达某个确定点后,进程空间里就…

    Java 2023年5月30日
    083
  • Java常用类(一)

    Java常用类(一) Java常用类(一) – 一、String 类:(不可变的字符序列) 1.1 String:字符串,使用一对 ” ” 引起…

    Java 2023年6月9日
    095
  • 2.Mybatis-常用sql

    1.Mybatis常用select语句 SELECT sr.ROLE_ID AS roleId, sr.ROLE_NAME AS roleName, sr.IS_ACTIVE AS…

    Java 2023年6月13日
    072
  • java中方法的重载和重写

    一、方法的重载(Overload) 概念: 重载(overloading) 是在一个类里面,方法名字相同,而参数列表(个数、类型、参数排列顺序等)不同。返回类型可以相同也可以不同。…

    Java 2023年6月13日
    057
  • Java开发之@PostConstruct和@PreConstruct注解

    Java开发之@PostConstruct和@PreConstruct注解从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation…

    Java 2023年5月29日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球