首页 > 数据库 >redis缓存的穿透及解决的方案

redis缓存的穿透及解决的方案

时间:2024-07-08 21:29:51浏览次数:17  
标签:缓存 数组 误判 redis 布隆 穿透 key 过滤器

概念

缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻击。

解决方案

方案一:将每次查询到为null的值存入redis
优点:简单
缺点:消耗内存,可能会出现数据不一致的情况
方案二:使用布隆过滤器
在这里插入图片描述
布隆过滤器主要是用于检索一个元素是否在一个集合中。
优点:内存占用较少,没有多余的key
缺点:实现复杂,存在误判

底层原理:

它的底层主要是先去初始化一个比较大数组(bitmap),里面存放的二进制0或1。在一 开始都是0,当一个key来了之后经过3次hash计算,模于数组长度找到数据 的下标然后把数组中原来的0改为1,这样的话,三个数组的位置就能标明一 个key的存在。查找的过程也是一样的。 当然是有缺点的,布隆过滤器有可能会产生一定的误判,我们一般可以设置 这个误判率,大概不会超过5%,其实这个误判是必然存在的,要不就得增 加数组的长度,其实已经算是很划分了,5%以内的误判率一般的项目也能 接受,不至于高并发下压倒数据库。

标签:缓存,数组,误判,redis,布隆,穿透,key,过滤器
From: https://blog.csdn.net/weixin_45693326/article/details/140252313

相关文章

  • mybatis缓存
    MyBatis提供了两级缓存机制:一级缓存(本地缓存)和二级缓存(全局缓存)。这两级缓存可以显著提高数据查询的效率,减少数据库访问的次数。下面介绍MyBatis的一级缓存和二级缓存的原理、配置和使用方法。题外话:......
  • 基于 RedisTemplate + 线程池 实现 Redis分布式锁
    分布式锁需求往往部署的后台服务不会只是单机部署了,而是通过集群的方式运行在两个甚至多个部署的服务器上(即便是同一个服务器的两个端口上,也会出现同样的问题)等架构来进行部署。在用户所发送的请求中,每个请求将会通过负载均衡发送到不同的服务器中。如果我们还想对集群中的......
  • 使用Java构建可靠的分布式缓存系统
    使用Java构建可靠的分布式缓存系统大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!1.分布式缓存系统概述在现代软件架构中,分布式缓存系统扮演着至关重要的角色,它能够显著提升系统的性能和扩展性。本文将探讨如何使用Java构建一个可靠的分布式缓存系统,利......
  • Redis基础教程(十六):Redis Stream
    ......
  • spring为什么使用三个缓存解决循环依赖
    使用三个缓存(singletonObjects,earlySingletonObjects,singletonFactories)来解决循环依赖问题,主要是为了确保Bean的正确创建和初始化流程,同时避免死锁和无限递归的情况。下面是使用三个缓存的好处和必要性:确保Bean的正确创建:singletonFactories缓存中保存的是Bean的工厂对象,这......
  • spring三级缓存解决循环依赖原理
    在Spring框架中,Bean的实例化和管理是通过其核心的IoC容器完成的。在处理Bean的依赖注入时,可能会遇到循环依赖的问题,即两个或多个Bean相互引用对方。为了解决这一问题,Spring采用了三级缓存机制。一级缓存:singletonObjects这是SpringIoC容器中的主要缓存,用于存放已经创建并完全初......
  • Docker部署Django+MySQL+Redis+Nginx+uWSGI+Celery(超详细)
    一、知识储备经过我们之前学习的Docker相关知识,现在我们来进行实战,以下介绍如何通过DockerCompose部署Django项目:先前知识:Docker学习笔记(一)概念理解-CSDN博客Docker学习笔记(二)镜像、容器、仓库相关命令操作-CSDN博客Docker学习笔记(三)Dockerfile-CSDN博客DockerCompose......
  • nginx作为反向代理服务器:代理MySQL、Postgresql、Redis及多个TCP服务
    使用Nginx作为反向代理服务器,可以代理MySQL、PostgreSQL、Redis及多个TCP服务。这需要配置Nginx的stream模块。以下是详细的配置步骤:1.确保Nginx支持stream模块首先,确保Nginx已经编译并支持stream模块。运行以下命令检查:nginx-V在输出中查找--with-str......
  • 设计与优化淘客返利系统中的分布式缓存架构
    设计与优化淘客返利系统中的分布式缓存架构大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在设计和优化淘客返利系统中的分布式缓存架构时,我们面临着诸多挑战和考虑因素。本文将探讨如何利用现代缓存技术和分布式系统原理,设计一个高效、可扩展的缓......
  • Redis 超全面试题及答案整理,最新面试题
    Redis面试题及答案整理,最新面试题Redis持久化机制有哪些?Redis支持两种主要的持久化机制:RDB(快照)和AOF(追加文件)。1、RDB(RedisDatabase):在指定的时间间隔内,执行快照存储,将内存中的所有数据保存到磁盘上的一个快照文件中。这个机制可以通过在redis.conf配置文件中设置不同......