【Redis知识点总结】(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法

news2024/12/31 6:16:31

Redis知识点总结(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法

  • 缓存雪崩
  • 缓存穿透
    • 布隆过滤器
  • 缓存击穿
  • Redis高级用法
    • bitmap
    • HyperLogLog

缓存雪崩

缓存雪崩是指,同一时间有大量的缓存key失效,或者redis节点直接宕机了,造成大量的请求打向数据库,像雪崩一样。

原本我们的redis就像是数据库前面的一堵墙,挡住大量的请求,只有少量的请求打到数据库。

在这里插入图片描述

但是由于大量的缓存key在同一时间失效,相当于是redis这堵墙开了个大口,这时候大量的请求就会同一时刻打向数据库,有可能直接把数据库打挂掉。

在这里插入图片描述

面对这种问题,解决办法就是给每一个key的过期时间添加一个随机值,然后redis要以集群方式部署,避免redis单点故障导致所有请求打向数据库。

缓存穿透

缓存穿透是指一个请求查询的数据在缓存中没有,在数据库中也没有,这种请求每次都会直达数据库,向穿过了缓存层一样。如果客户端不断的发起这样的请求,就会造成大量的无效查询,如果是黑客通过某种手段制造这种大量的无效请求打向数据库,也有可能把数据库打挂掉。

在这里插入图片描述

解决办法有如下几种:

  • 添加校验规则,过滤无效请求
  • 缓存一个空值到redis,并设置一个较短的过期时间
  • 使用布隆过滤器

布隆过滤器

布隆过滤器是基于bitmap加多个hash函数组成的一个用于判断一个key是否存在的过滤器。当它判断该key不存在时,那就一定是不存在的;当它判断该key是存在的时候,大概率是存在的,但也有可能是误判。

原理如下:

在这里插入图片描述

布隆过滤器包含多个hash函数和一个bitmap,比如有3个hash函数和一个bitmap。当我要通过布隆过滤器判断是一个key是否存在是,布隆过滤器会分别使用这三个hash函数算出三个bitmap的下标,然后到bitmap中查看对应的bit是否为1,如果三个bit都为1,则判断key存在,如果有至少其中一个bit是0,则判断key不存在。

在这里插入图片描述

有了布隆过滤器之后,我们每次往数据库添加数据的时候,同时往布隆过滤器中添加一份,每次要向数据库查询数据的时候,先通过布隆过滤器判断是否存在,存在再去查,不存在就不去查了,这样就能过滤掉缓存穿透造成的无效查询请求。

缓存击穿

缓存击穿的意思是一个热点key在某个时间点突然失效了,因为它是热点key,因此大量请求同一时刻涌向数据库去查询这个key,把数据库打挂掉。

在这里插入图片描述

解决办法有两种:

  • 设置热点key永不失效
  • 添加分布式锁,每次查询数据前要先获取到锁,没抢到锁的则睡眠一会再重试

Redis高级用法

bitmap

上面说到布隆过滤器是基于bitmap实现的,这个bitmap其实就是基于redis的string类型的,因为string会保存二进制字节数组,所以自然可以用它来实现bitmap的功能。

当我们向bitmap中写入一个bit时,可以用以下命令:

setbit {bitmap} {offset} 1

查询一个bit时就这样:

getbit {bitmap} {offset}

这里的{bitmap}指的是这个bitmap的名字,由我们自己指定,{offset}则是bit在bitmap中的偏移量。

然后可以这样统计bitmap中共有多少个bit是1:

bitcount {bitmap}

还可以通过以下这个命令对多个bitmap进行按位与运算,合并成一个新的bitmap。

bitop and {new_bitmap} {bitmap1} {bitmap2} {bitmap3}

在这里插入图片描述

假设我们系统有1亿个用户,我们要统计在2024年1月28日当天这1亿个用户中有多少用户登录,我们可以用一个长度为1亿的bitmap,然后bitmap中每个bit对应一个用户当天的登录情况,登录了则置为1,否则该bit就是0,那么我们只要用一个bitcount命令就可以得到当天这1亿个用户的登录情况了。

在这里插入图片描述

那我们要统计一周内连续登录的用户数呢?我们只要使用 bitop and 命令把一周内的七天对应的七个bitmap按位与合并成一个新的bitmap,再用bitcount命令统计一下这个新的bitmap即可。

在这里插入图片描述

HyperLogLog

redis有一个高级功能HyperLogLog,可以用来做基数统计。基数统计的意思是求一个集合中不重复的元素个数。

比如我们现在要统计某网页的UV,UV就是一天之内访问当前页面的用户数,一个用户一天之内多次访问该页面,只能算作访问一次。

此时我们可以使用HyperLogLog完成网页UV的统计:

  1. 我们用网页名称做key,比如uv:{pageName}这样
  2. 一个用户访问该页面,我们就使用pfadd命令把该用户id添加进去,比如 pfadd uv:page1 uid1
  3. 如果要统计该页面的uv,我们使用pfcount命令,比如pfcount uv:page1这样

在这里插入图片描述

但是有一点要注意,HyperLogLog的统计不是精确的,有一定的误差,如果要精确统计,那么HyperLogLog就不适用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1542977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于nodejs+vue学生作业管理系统python-flask-django-php

他们不仅希望页面简单大方,还希望操作方便,可以快速锁定他们需要的线上管理方式。基于这种情况,我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题,满足用户需求。 课题主要分为三大模块:即管理员模块和学生…

(已解决)vue运行时出现Moudle Bulid error: this.getoptios is not a function at........

1.首先查看你的less-loader版本 点击package.json 即可查看less-loader版本,我之前的版本是12.0,太高了,出现了不兼容的问题 2、卸载less-loader ctrlshift~ 打开项目终端 ,输入: npm uninstall less-loader 3.重…

Linux中的常用基础操作

ls 列出当前目录下的子目录和文件 ls -a 列出当前目录下的所有内容(包括以.开头的隐藏文件) ls [目录名] 列出指定目录下的子目录和文件 ls -l 或 ll 以列表的形式列出当前目录下子目录和文件的详细信息 pwd 显示当前所在目录的路径 ctrll 清屏 cd…

突破极限!DNF全新装备现身,无限高达流震撼登场

近期,DNF(地下城与勇士)的玩家们热议的话题不再是往日的副本攻略或职业平衡,而是一件神秘的装备——“玉化腰带”。这个装备的出现,引发了一股前所未有的热潮,因为它带来的无限高达流,彻底颠覆了…

0325 ISP流程介绍 RAW/RGB/YUV

学习参考:isp流程介绍(yuv格式阶段) - 知乎 一、RAW 1.1 ISP RAW 之DPC DPC(defective pixel correction)也就是坏点矫正,在sensor接收光信号,并做光电转换之后。 这一步设计的意义在于:摄像头sensor的感光元件通常很多会存在一些工艺缺陷…

硅谷甄选项目笔记

硅谷甄选运营平台 此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。 此次教学课程涉及到技术栈包含***:vue3TypeScriptvue-routerpiniaelement-plusaxiosecharts***等技术栈。 一、vue3组件通信方式 通信仓库地…

maven下载与使用

Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基…

苍穹外卖项目笔记

软件开发流程 需求分析:说明书和原型 设计:UI,数据库,接口设计 编码:项目代码,单元测试 测试:测试用例,测试报告 上线运维:软件环境安装,配置 软件环境…

《大模型技术要求标准》重磅发布,九章云极DataCanvas公司助力我国大模型技术发展

近日,中国信息通信研究院(简称“中国信通院”)重磅发布**《人工智能开发平台通用能力要求 第4部分:大模型技术要求》**(以下简称“大模型技术要求标准”),九章云极DataCanvas公司依托在大模型领…

Linux收到一个网络包是怎么处理的?

目录 摘要 ​编辑 1 从网卡开始 2 硬中断,有点短 2.1 Game Over 3 接力——软中断 3.1 NET_RX_SOFTIRQ 软中断的开始 3.2 数据包到了协议栈 3.3 网络层处理 3.4 传输层处理 4 应用层的处理 5 总结 摘要 一个网络包的接收始于网卡,经层层协议栈…

Samtec应用漫谈 | EVSE基础设施的前进道路

【摘要/前言】 能源的格局正在不断变化,燃油价格正在上升,因此越来越多的人正在考虑个人电动车的经济性。 此外,全球物流公司正在更多地采用电动面包车和卡车进行物流运输。大街小巷中,大家可以看到各式新能源汽车,电…

闻了刚脱下的袜子导致肺部感染真菌?后果很严重

之前有网友分享自己只因闻了刚脱下的袜子,就导致了肺部感染真菌的经历,引发众多网友的关注与热议。 那么,臭袜子又怎么会和肺部感染有关系呢?臭袜子为什么不能闻呢?袜子上面到底有什么有危险的成分呢? 图源…

10-shell编程-辅助功能

一、字体颜色设置 第一种: \E[1:色号m需要变色的字符串\E[0m 第二种: \033[1:色号m需要变色的字符串\033[0m ########################### \E或者\033 #开启颜色功能 [1: #效果 31m #颜色色号 \E[0m #结束符 1,颜色案例 2,效果案例 二、gui&am…

应急响应实战笔记04Windows实战篇(1)

第1篇:FTP暴力破解 0x00 前言 ​ FTP是一个文件传输协议,用户通过FTP可从客户机程序向远程主机上传或下载文件,常用于网站代码维护、日常源码备份等。如果攻击者通过FTP匿名访问或者弱口令获取FTP权限,可直接上传webshell&#…

C语言学习 五、一维数组与字符数组

5.1一维数组 5.1.1数组的定义 数组特点: 具有相同的数据类型使用过程中需要保存原始数据 C语言为了方便操作这些数据,提供了一种构造数据类型——数组,数组是指一组具有相同数据类型的数据的有序集合。 一维数组的定义格式为 数据类型 数…

删除数组中的指定元素(了解如何删除数组中的指定元素,并返回一个新的数组,看这一篇就足够了!)

前言:有时候我们会遇到要在数组中删除指定元素,但是不能创建新的数组,那么这个时候应该如何操作呢? ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 废话不多讲,让我们…

阿里 Modelscope 创空间部署在本地环境操作文档

创建创空间的步骤直接跳过。 备注:我的电脑是Windows 第一步:获取创空间代码,直接下载代码太慢了,建议通过git获取代码 第二步:复制链接,打开cmd 直接粘贴回车下载。下载完之后的到了我的Service-Assistant文件夹。再git clone https://gith…

幻尔机械臂FPV安装darknet_ros(YOLO V3)

mkdir -p catkin_workspace/src cd catkin_workspace/src git clone --recursive gitgithub.com:leggedrobotics/darknet_ros.git cd ../ 在ROS工作空间目录下,执行命令: catkin_make -DCMAKE_BUILD_TYPERelease 发布摄像头图像话题: …

电商API数据采集接口——电商大数据构建及智能应用

现在越来越多的电商企业和运营都开始关注数据的应用,在13年淘宝运营技巧的爆发,这其实就是数据带来的红利。在数据大爆炸的时代,数据分析已经成为了企业制定策略、发现问题的重要方法,所以,数据分析绝对是企业管理的贤…

利用云手机高效运营多个海外社媒账户

随着全球化进程的不断推进,中国出海企业和B2B外贸企业日益重视海外社媒营销,将其视为抢占市场份额的关键策略。在海外社媒营销中,企业通常会在多个平台上批量开通账户,搭建自己的社媒内容矩阵。本文将会介绍如何用云手机高效运营多…