redis中的缓存穿透问题

news/2024/5/19 1:51:25

 缓存穿透

81ac4bee740a400ca7c04770198b7d25.png

缓存穿透问题:

一般请求来到后端,都是先从缓存中查找数据,如果缓存中找不到,才会去数据库中查询数据。

而缓存穿透就是基于这一点,不断发送请求查询不存在的数据,从而使数据库压力过大,导致数据库崩溃!

解决这一问题,一般有两种解决方案:

一、缓存空数据:

把查询不到结果的请求,缓存值设置为空,这样该请求下次过来,缓存中就有空数据返回了。

4c48b0d0e2d14b059e5bebd5296742f8.png

 缺点

1.缓存了大量没用的空数据,浪费内存。

2.导致数据不一致性,比如说:一开始一个id为1的请求过来,我确实查询不到,缓存一个空数据。然后要添加了一条id为1的数据。但这个时候用户再来查询,得到的还是缓存中的空数据,要等到改空数据过期以后,才能去数据库中更新最新的数据,导致了数据的不一致性。

二、布隆过滤器:

931cf3ca3be64fc6bde6c949039bf98c.png

布隆过滤器判断元素是否存在的原理:

aa4ad18be65d4b7ea3c34f6371139bf8.png

布隆过滤器的误判情况:

b537db660c46418d9425c88a28b9a4a5.png

布隆过滤器使用情况:1.确定模型是一个集合结构,且没有删除行为 (类似于黑名单查询)。2.能接受一定的失误率。

11edc9be44a245fd95b17f83334dc39e.png

总结:

1.缓存穿透

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

2.布隆过滤器

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


http://www.mrgr.cn/p/17637855

相关文章

ubuntu无法用快捷键启动终端(CTRL+AIT+T)

我的电脑不知道安装什么东西之后,就不能用快捷键(CTRLAITT)打开终端了 只能在文件夹内,点击鼠标右键选择终端,然后打开终端 一直这么用了几个月,今天实在受不了了,所以解决此问题 本文参考文章…

力扣-118. 杨辉三角

1.题目介绍 题目地址(118. 杨辉三角 - 力扣(LeetCode)) https://leetcode.cn/problems/pascals-triangle/ 题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows = 5 输出: …

IDEA中springboot项目编译两次的问题

原因:因为在导入项目的之后,项目无法运行,问题1:显示缺少org.springbootframe的依赖,不知道怎么解决,网上搜了个方法,就是勾选下图的选项,意思是把build操作由IDEA交给Maven,勾选之后确实可以启动项目了但是后面在执行Mybatis时,问题2:我发现无论如何都会报一个唯一…

深入刨析 mysql 底层索引结构B+树

文章目录 前言一、什么是索引?二、不同索引结构对比2.1 二叉树2.2 平衡二叉树2.3 B-树2.4 B树 三、mysql 的索引3.1 聚簇索引3.2 非聚簇索引 前言 很多人看过mysql索引的介绍:hash表、B-树、B树、聚簇索引、主键索引、唯一索引、辅助索引、二级索引、联…

计算机为什么需要中断?

// generated by ChatGPT-3.5 & hk416hasu中断是计算机系统中一种重要的机制,它允许系统在执行过程中临时中止当前任务,转而处理其他优先级更高或更紧急的任务,然后再返回原来的任务。以下是一些计算机需要中断的原因:1. 响应外部事件:计算机系统需要能够响应各种外部…

SpringCloud之负载均衡Ribbon

Ribbon 是一个客户端负载均衡工具,主要功能是将面向服务的Rest模板(RestTemplate)请求转换成客户端负载均衡的服务调用。通过Ribbon,开发人员可以在客户端实现请求的负载均衡,而无需单独部署负载均衡器。Ribbon支持多…

Linux实现文件共享

#nfs-utils、rpcbind 软件包来提供 NFS 共享服务 #客户端创建共享文件夹: nmcli c reload nmcli c up ens160 systemctl stop firewalld systemctl disable firewalld rpm -q nfs-utils rpcbind #查看是否安装 systemctl enable rpcbind systemctl enable nfs…

OpenHarmony网络协议通信—libevent [GN编译] - 事件通知库

libevent主要是用C语言实现了事件通知的功能 下载安装 直接在OpenHarmony-SIG仓中搜索libevent并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径:./third_party/libevent 修改添加依赖的编译脚本 在/developtools/bytrace_standard/…

【爆款推荐】初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-011

PDF格式公众号回复关键字:ZKYDT011原文1 The writer lost her father at the age of four, didn’t she? 解析 1 The writer 这位作者, lost 失去, her father 她的父亲, at the age of four 在4岁的时候, didn’t she?不是吗? 这位作家四岁时失去了父亲,不是吗? 2 Eve…

Laravel 6 - 第十三章 请求

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

关于双向循环列表的插入、删除、遍历

目录 双向循环链表公式初始化双向循环链表 构建双向循环链表结构体 // 双向循环链表节点定义 typedef struct double_loop_node { char data[DATA_LEN]; // 数据域,存储数据长度 struct double_loop_node *next; …

02-属性事件过滤双向绑定

es6的对象写法 // 正常的写法 let arr = [逃课, 打游戏, 欺负小满] let hobbyDetail = {name: "大乔",age: 4,hobby: arr } console.log(hobbyDetail)// 简写 // 正常的写法 let arr = [逃课, 打游戏, 欺负小满] let hobbyDetail = {name: "大乔",age: 4,h…

学习笔记447—本地部署 Llama3 – 8B/70B 大模型!最简单的方法: 支持CPU /GPU运行 【3种方案】

本地部署 Llama3 – 8B/70B 大模型!最简单的方法: 支持CPU /GPU运行 【3种方案】目前在开源大模型领域,Llama3 无疑是最强的!这次Meta不仅免费公布了 8B和70B两个性能强悍的大模型,400B也即将发布,这是可以和GPT-4对打的存在!今天我们就来介绍3各本地部署方法,简单易懂…

01 线段树

目录线段树简介节点加法线段树1. 准备变量2. 上拉操作3. 建树4. 懒标记5. 下放操作6. 区间修改updata异或线段树pushupupdata最值线段树updatapushup 线段树 简介线段树(一个二叉树)是一个非常重要的数据结构,利用分治的思想。可以用于维护一些满足结合律区间的信息,例如区间…

最新windows版本erlang26.0和rabbitmq3.13下载

Erlang下载 官网下载:https://www.erlang.org/patches/otp-26.0 百度网盘:https://pan.baidu.com/s/1xU4syn14Bh7QR-skjm_hOg 提取码:az1t RabbtitMQ下载 官网下载:https://www.rabbitmq.com/docs/install-windows 百度网盘…

http是什么?http的基础知识教程详解(2024-04-24)

1、http的概念 HTTP(超文本传输协议,HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。 HTTP 是万维网(WWW)的数据通信的基础,设计目的是确保客户端与服务器之间的通…

深度优先搜索 Depth First Search (DFS)

本篇篇幅较长,请做好心理准备!目前三章节: 1.深搜入门(一维方向 数字选数类) 2.深搜入门(二维方向 迷宫类) 3.深搜进阶(迷宫类问题--最少步数和输出路径)(待开放)第一章:深搜入门(一维方向 数字选数类) 前置知识:函数、递归 为了保证学习效果,请保证已经掌握前置知识…

利用云服务器搭建自己的微信聊天机器人

本次部署使用的是LinkAI提供的接口,不需要魔法 选择比较简单的docker部署,其他的部署方式可以参考官方文档:https://docs.link-ai.tech/cow/quick-start 0、前置 租一台云服务器,因为是调用的其他平台的大模型api,所以配置不用太高 注册并登陆LinkAI平台(https://link-ai…

vue集成百度地图vue-baidu-map

文章目录 vue集成百度地图vue-baidu-map1. Vue Baidu Map文档地址2. 设置npm数据源3. 安装vue-baidu-map4. 配置vue-baidu-map4.1 main.js全局注册4.2 vue页面设置4.3 效果 vue集成百度地图vue-baidu-map 1. Vue Baidu Map文档地址 https://dafrok.github.io/vue-baidu-map/#…

华为机考入门python3--(16)牛客16-购物单最大满意度

分类:动态规划,组合,最大值,装箱问题 知识点: 生成递减数 100, 90, 80, ..., 0 range(100, -1, -10) 访问列表的下标key for key, value in enumerate(my_list): 动态规划-捆绑装箱问题 a. 把有捆绑约束的物…