《redis缓存淘汰机制》

【redis缓存淘汰机制导读】redis作为一款内存型数据库,其设计的初衷就是为了给广大业务层提供高效的数据读、写能力,因为访问内存的速度肯定是要比直接访问磁盘的速度快几个数量级,假设业务方所有数据读、写请求全部都转发到后台的数据库,那么势必给数据库带来很大的压力,甚至可能导致数据库宕机。那么本文将为您介绍redis的缓存、以及缓存淘汰的机制。

   

      redis用作缓存时,优先会把redis部署在数据库的前端,帮助数据库拦住大部分的读、写请求,redis缓存也会存在是否命中的情况,缓存并不能满足所有的业务数据请求。一般会有如下两种情况:

      缓存命中:redis中有相关的数据,直接读取出来并返回给业务方。

      缓存缺失:redis不存在相应的数据,那此时只能往后端的数据库去请求,同时也要把缺失的数据写回redis,相当于更新缓存,方便业务方下次请求数据的时候,能直接从缓存中获取。

图片

       从上文的描述中也能看出一些问题,假如缓存没有命中,业务方只能从后台数据库去查询相关数据,那此时缓存中缺失的数据该以什么样的方式去更新呢?是立即更新还是等待某个时机去更新,基于这种情况,redis推出了两种缓存机制。

 只读缓存

       只读缓存,顾名思义只提供数据查询服务,当业务方调用GET接口查询数据,存在则给业务方返回缓存中的数据;不存在则从数据库中去查;当业务方调用DEL、SET接口对数据进行删除、修改时,如果redis已经缓存了这类数据,redis会优先删除这些数据,随后直接去后台数据库删除、修改这些数据。当下次业务方再次请求这些被删除的数据,会发生缓存缺失,随后去数据库中查询,同时把数据库中这些数据更新到缓存中来。同学们可以结合下面的流程来理解只读缓存。

图片

     只读缓存的优势在于,数据库中能实时保存最新的业务数据,就算redis服务宕机了,最新的数据不会随着redis的宕机而丢失。

 读写缓存

    读写缓存,那便是业务方的读、写请求都直接在缓存中进行,并将缓存中的结果实时返回给业务方,但缓存中数据的更新并不及时写回数据库,这样就存在最新业务数据丢失的风险。那读写缓存中最新的业务数据是按照什么策略写回数据库的呢?redis提供"同步直写"和"异步写回"两种策略。

      同步直写:写请求发给缓存,同时也会发给后端数据库进行处理,等到缓存和数据库都更新完,才给客户端返回。那样就严重拖慢了redis的相应速度了。

      异步写回:写请求优先在缓存中处理。等这些新增或修改的数据要被从缓存中淘汰掉时,缓存将它们写回后端数据库。这样便不会影响redis响应速度了。

图片

      好,简单介绍完redis的缓存及类型,那继续讨论一个缓存淘汰的问题,假设redis主库接收到了大量的业务客户端请求,或者业务客户端消费速度过慢,导致redis输出缓冲区中积攒了大量的数据,甚至把缓存写满了,那这个时候该怎么办?接下来介绍缓存淘汰策略。

Redis 缓存有哪些淘汰策略?

    我们根据淘汰候选数据集的范围把它们分成两类:

    1、基于过期时间的淘汰机制:volatile-random、volatile-ttl、volatile-lru、volatile-lfu。

      2、基于数据范围的淘汰机制: allkeys-lru、allkeys-random、allkeys-lfu。

   Redis使用的内存空间超过maxmemory值时,redis便会按照一定的规则进行数据的淘汰,具体规则如下:

     volatile-ttl: 针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。

    volatile-random:针对设置了过期时间的键值对,进行随机删除。

    volatile-lru: 基于LRU算法筛选设置了过期时间的键值对,进行淘汰。

    volatile-lfu: 基于LFU算法选择设置了过期时间的键值对,进行淘汰。

     PS:针对LRU算法、LFU算法,笔者在后续的文章中做介绍。

 那第二批淘汰策略,就更好理解些,基于所有的键值对,进行随机、采用LRU、LFU算法进行淘汰。

   何为LRU算法?这也是面试中经常被问到的知识点,面试官可能要你手写个LRU算法出来,或者结合redis做提问。

   LRU全称:Least Recently Used,即按照最近、最少使用的原则来筛选数据,最近频繁被使用的热数据会留在缓存中。那如何筛选?LRU把所有的数据组织成一个链表,链表的头和尾分别表示MRU端和LRU端,分别表示最近常使用和最近不常使用。可以看看如下示意图:

图片

    最新写入的数据15,会被塞到链表头部,如果当前内存中的容量上限就是5,那么为了插入15这个最新的数据,末尾端的5便要被筛选出来,进行淘汰。

     那还存在一个问题,筛选出来的数据是直接把它删除掉吗?假设筛选出来的数据比数据库中的数据还要新,那么直接删除,势必会造成数据丢失。redis一般这样处理:一旦选中淘汰的数据后,如果这个数据是干净的,就直接删除;如果这个数据是脏的,redis把它写回数据库,如下图所示:

图片

那如何判断数据是否是脏的?

    和后端数据库中的数据保持一致,说明就是干净的数据,不一致就是脏数据,就是这么简单。   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWK系统学习指南:从文本处理到数据分析的终极武器 介绍

目录 一、AWK核心设计哲学解析 1.1 记录与字段的原子模型 1.2 模式-动作范式 二、AWK编程语言深度解析 2.1 控制结构 说明: 2.2 关联数组 代码说明: 示例输入和输出: 注意事项: 2.3 内置函数库 三、高级应用技巧 3.1…

深入解析AI技术原理

序言 在当今数字化时代,人工智能(AI)已经成为科技领域最炙手可热的话题之一。从智能家居到自动驾驶汽车,从医疗诊断到金融风险预测,AI的应用无处不在。然而,对于许多人来说,AI背后的技术原理仍然充满了神秘色彩。本文将深入探讨AI的核心技术原理,从基础理论到前…

计算机组成原理(3)

计算机组成原理(3) 存储器层次结构存储器概述存储器分类存储器性能指标 半导体随机存储SRAM和DRAM 存储器层次结构 主存-辅存:实现了虚拟存储系统,解决了主存容量不足的问题; Cache-主存:解决了主存于CPU速…

计算机网络-SSH基本原理

最近年底都在忙,然后这两天好点抽空更新一下。前面基本把常见的VPN都学习了一遍,后面的内容应该又继续深入一点。 一、SSH简介 SSH(Secure Shell,安全外壳协议)是一种用于在不安全网络上进行安全远程登录和实现其他安…

【理论知识】 2D 卷积、3D 卷积与 3D 池化

摘要 卷积神经网络(Convolutional Neural Networks, CNNs)在计算机视觉、视频处理和医学影像分析等领域取得了显著的成功。卷积操作作为CNN的核心,主要包括二维卷积(2D Convolution)、三维卷积(3D Convolu…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

uniapp 编译生成鸿蒙正式app步骤

1,在最新版本DevEco-Studio工具新建一个空项目并生成p12和csr文件(构建-生成私钥和证书请求文件) 2,华为开发者平台 根据上面生成的csr文件新增cer和p7b文件,分发布和测试 3,在最新版本DevEco-Studio工具 文…

在亚马逊云科技上云原生部署DeepSeek-R1模型(下)

在本系列的上篇中,我们介绍了如何通过Amazon Bedrock部署并测试使用了DeepSeek模型。在接下来的下篇中小李哥将继续介绍,如何利用亚马逊的AI模型训练平台SageMaker AI中的,Amazon Sagemaker JumpStart通过脚本轻松一键式部署DeepSeek预训练模…

A new release of pip is available: 24.2 -> 25.0

您可以使用官方提供的 get-pip.py 脚本来安装或升级pip。 1,下载 get-pip.py 脚本: curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 2,运行脚本以安装或升级pip: python get-pip.py 3,实际运行效果

使用WebUI访问本地Deepseek(Ollama集成Open WebUI)

在《deepseek本地部署和使用(Linux虚拟机)》中,我们使用Ollama部署了Deepseek-r1,但是只能通过命令行方式交互,默认Ollama启动后,会启动一个监听到127.0.0.1,用以接收POST 请求,服务…

[NKU]C++安装环境 VScode

bilibili安装教程 vscode 关于C/C的环境配置全站最简单易懂!!大学生及初学初学C/C进!!!_哔哩哔哩_bilibili 1安装vscode和插件 汉化插件 ​ 2安装插件 2.1 C/C 2.2 C/C Compile run ​ 2.3 better C Syntax ​ 查看已…

DeepSeek图解10页PDF

以前一直在关注国内外的一些AI工具,包括文本型、图像类的一些AI实践,最近DeepSeek突然爆火,从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF,免费附件链接给出。 1 本地 1 本地部…

如何将Excel的表格存为图片?

emmm,不知道题主具体的应用场景是什么,就分享几个我一般会用到的场景下奖excel表格保存为图片的技巧吧! 先来个总结: 方法 适用场景 画质 操作难度 截图(WinShiftS) 快速保存表格,方便粘贴…

UnrealEngine dotnet.exe 请求的操作需要提升 解决方案

一、问题如图 二、解决方式 按照图片路径找到dotnet.exe,鼠标右键-属性- 兼容性,勾选以管理员方式运行后重启UE。如下图:

活动预告 |【Part 1】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

SAP HCM PFCG读取结构化权限参数

权限:HCM的权限分两套,一套是PFCG的普通权限,一套是结构化权限是根据组织ID限制访问权限的,今天我们讨论的话题如何把这两类的权限组合起来 场景:例如下载有个薪酬管理人员,他复制A和B部门,但是…

3D数字化营销:重塑家居电商新生态

随着电商的蓬勃发展,网上订购家具已成为众多消费者的首选。然而,线上选购家具的诸多挑战,如风格不匹配、尺寸不合适、定制效果不如预期以及退换货不便等,一直困扰着消费者。为解决这些问题,家居行业急需一种全新的展示…

发布:大彩科技DN系列2.8寸高性价比串口屏发布!

一、产品介绍 该产品是一款2.8寸的工业组态串口屏,采用2.8寸液晶屏,分辨率为240*320,支持电阻触摸、电容触摸、无触摸。可播放动画,带蜂鸣器,默认为RS232通讯电平,用户短接屏幕PCB上J5短接点即可切换为TTL电…

【C++篇】C++11新特性总结2

目录 1,可变参数模板 1.1,基本语法及原理 1.2,包扩展 4.3,emplace系列接口 2,新的类功能 2.1,默认的移动构造和移动赋值 2.2,default和delete 2.3,final与override 3&…