Redis_缓存2_缓存删除和淘汰策略

14.5 缓存数据的删除和替换

14.5.1 过期数据

可以使用ttl查看key的状态。已过期的数据,redis并未马上删除。优先去执行读写数据操作,删除操作延后执行。

14.5.2 删除策略

redis中每一个value对应一个内存地址,在expires,一个内存地址,对应一个时间截,如果达到指定时间,就完成删除处理
在这里插入图片描述
三种删除策略

  • 定时删除:创建一个定时器,当key设置过期时间已到达,删除key,同时expires中也删除

    • 优点:节约内存
    • 缺点:对于cpu实时处理压力影响,对redis执行的效率有影响
  • 惰性删除:数据到达过期时间,先不做删除,直到下次访问该数据时,再做删除(以空间换时间

    • 执行流程:在get数据时,先执行redis中一个内部函数 expireIfNeeded(),如果没有过期,就返回,如果已过期,就删除,返回-2
    • 优点:节约CPU资源
    • 缺点:内存占用过大。
  • 定期删除

    • redis启动服务时,读取server.hz的值,默认为10,可以通过info server指令查看
    • 每秒钟执行server.hz次定时轮询,调用serverCron()函数,函数中又执行databasesCron(),对16数据库进行轮询,执行了activeExpireCycle(),检测其中元素的过期情况。每次轮询都执行250ms/server.hz时长。随机从对应的库中抽取20个(默认)key进行检测
    • 如果key已过期,则删除key
    • 如果一轮中删除的key数量>w*25%,则再次循环刚才的过程
    • 如果一轮中删除的key数量<=w*25%,则开始检查下一个库

redis中使用惰性删除和定期删除

14.5.3 逐出算法

通过 配置文件 maxmemory < bytes>来设置最大缓存容量。一般情况,建议设置为总数据的15%到30%,在实际生产环境下,可以设置50%。如果不设置,默认全部使用

redis缓存淘汰策略

淘汰策略
noevction不淘汰
进行数据淘汰
过期数据淘汰
所有数据淘汰
volatile-lru
volatile-lfu
volatile-ttl
volatile-random
allkeys-lru
allkeys-lfu
allkeys-random

在redis默认情况下,不进行数据淘汰noevction,一旦缓存被写满了,再有写请求,redis直接返回错误。

过期数据淘汰策略,先限定了,数据都是在过期范围。

  • valotile-ttl:在进行筛选时,根据过期时间先后顺序进行一个删除,越早过期的越先被删除
  • valotile-random:在设置了过期时间的键值对中,进行随机删除
  • valotile-lru:会使用LRU算法筛选设置了过期的键值对
  • valotile-lfu:会使用LFU算法筛选设置了过期的键值对

所有数据淘汰策略:

  • allkeys-random:从所有键值对中随机筛选并删除
  • allkeys-lru:从所有键值对中采用LRU算法进行筛选删除
  • allkeys-lfu:从所有键值对中采用LFU算法进行筛选删除

LRU算法
算法Least Recently Used,最近最少使用原则,最近不用的数据会被筛选出来,最近频繁使用的数据会保留

lru算法,需要使用链表来管理所有缓存数据,带来内存开销。有数据被访问时,需要执行链表数据的移动,会降低redis性能。

记录数据最后一次访问的时间截,第一次会随机选出N个数据,作为一个候选集合,作一个排序,再把lru最小的数据进行淘汰

上面提到的N的配置:maxmemory-samples 5

LFU算法
算法Least Frequently Used,最不常用原则。根据历史访问频率来淘汰数据。

每个数据块都有一个引用计数,按引用计数来排序。如果引用计数相同,按照时间排序

  • 新加入的数据放在队尾,引用计为1
  • 当数据被访问,引用计数增加,队列重排
  • 当需要淘汰数据时,将队列尾部的数据块删除

逐出算法选择:maxmemory-policy noeviction

  • 优先使用allkeys-lru策略。
  • 如果业务数据访问频率差别不大,可以建议使用allkeys-random。
  • 首推的新闻、置顶视频,不设置过期时间,可以建议使得volatile-lru。

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

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

相关文章

BC117 小乐乐走台阶(附完整代码)

描述 小乐乐上课需要走n阶台阶&#xff0c;因为他腿比较长&#xff0c;所以每次可以选择走一阶或者走两阶&#xff0c;那么他一共有多少种走法&#xff1f; 输入描述 输入包含一个整数n (1 ≤ n ≤ 30) 输出描述 输出一个整数&#xff0c;即小乐乐可以走的方法数。 思路&a…

分享个试卷去笔迹什么软件,几个步骤轻松擦除

试卷擦去笔迹是一项非常关键的技能&#xff0c;它可以帮助你更好地管理你的笔记和文件。不管是小伙伴们想重新测试试卷或者是将试卷输出为电子版&#xff0c;都可以实现的。在这篇文章中&#xff0c;我将分享一些方法和软件&#xff0c;帮助你更好地进行试卷擦除。有需要的小伙…

个人博客系统测试报告

文章目录 一、功能测试1.编写测试用例2.总结测试后发现的BUG 二、UI自动化测试0.搭建测试环境1. 创建公共类2.注册页面UI自动化测试用例编写3.登录页面UI自动化测试用例编写4.用户博客列表页面自动化测试5. 修改个信息页面6. 文章编辑页面7. 设置密保问题发现bug 8. 所有用户文…

Stable Diffusion +EbSynth应用实践和经验分享

Ebsynth应用 1.安装ffmpeg 2.安装pip install transparent-background,下载模型https://www.mediafire.com/file/gjvux7ys4to9b4v/latest.pth/file 放到C:\Users\自己的用户名.transparent-background\加一个ckpt_base.pth文件 3.秋叶安装ebsynth插件,重启webui 填写项目基本…

Rest 优雅的url请求处理风格及注意事项

&#x1f600;前言 本篇博文是关于Rest 风格请求的应用和注意事项&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…

应急响应-Webshell

文章目录 一、Webshell概述什么是WebshellWebshell分类基于编程语言基于文件大小/提供的功能多少 Webshell 检测方法 二、常规处置方法三、技术指南1、初步预判2、 Webshell排查3、Web日志分析&#xff08;查找攻击路径及失陷原因&#xff09;4、系统排查4.1 Windows4.2 Linux …

CSS中的position属性有哪些值,并分别描述它们的作用。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ static⭐ relative⭐ absolute⭐ fixed⭐ sticky⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那…

通达OA SQL注入漏洞【CVE-2023-4166】

通达OA SQL注入漏洞【CVE-2023-4166】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

新的 Python URL 解析漏洞可能导致命令执行攻击

Python URL 解析函数中的一个高严重性安全漏洞已被披露&#xff0c;该漏洞可绕过 blocklist 实现的域或协议过滤方法&#xff0c;导致任意文件读取和命令执行。 CERT 协调中心&#xff08;CERT/CC&#xff09;在周五的一份公告中说&#xff1a;当整个 URL 都以空白字符开头时&…

gitlab修改远程仓库地址

目录 背景&#xff1a; 解决&#xff1a; 1.删除本地仓库关联的远程地址&#xff0c;添加新的远程仓库地址 2.直接修改本地仓库关联的远程仓库地址 3.打开.git隐藏文件修改远程仓库地址 4.拉取代码报错(git host key verification failed) 背景&#xff1a; 公司搬家&#…

image has dependent child images

问题&#xff1a;很多none的镜像无法被删除 解决过程&#xff1a; 1、通过 docker image prune -f 提示可删除为 0 2、直接进行删除报错&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同&#xff0c;下面说下。 问题1&#xff1a;编译错误提示“error:off_t undefined” 解决方法&#xff1a; 编…

宋浩线性代数笔记(五)矩阵的对角化

本章的知识点难度和重要程度都是线代中当之无愧的T0级&#xff0c;对于各种杂碎的知识点&#xff0c;多做题复盘才能良好的掌握&#xff0c;良好掌握的关键点在于&#xff1a;所谓的性质A与性质B&#xff0c;是谁推导得谁~

Ubuntu22.04复现SHADEWACHER(手动安你就慢了)

因为我是打算跑TC数据集&#xff0c;所以跳过audit安装。 我的Ubuntu使用的是清华源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04换什么源都会导致无法定位软件包&#xff0c;添加neo4j的官方源又会导致不信任的源。 22.04以下的版本&#xff0c;直接用命…

MySQL 根据多字段查询重复数据

MySQL 根据多字段查询重复数据 在实际的数据库应用中&#xff0c;我们经常需要根据多个字段来查询重复的数据。MySQL 提供了一些方法来实现这个功能&#xff0c;让我们能够快速准确地找到和处理重复数据。本文将介绍如何使用 MySQL 来根据多字段查询重复数据&#xff0c;并提供…

SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配

介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…

C语言——动态内存函数(malloc、calloc、realloc、free)

了解动态内存函数 前言&#xff1a;一、malloc函数二、calloc函数三、realloc函数四、free函数 前言&#xff1a; 在C语言中&#xff0c;动态内存函数是块重要的知识点。以往&#xff0c;我们开辟空间都是固定得&#xff0c;数组编译结束后就不能继续给它开辟空间了&#xff0…

贴吧照片和酷狗音乐简单爬取

爬取的基本步骤 很简单&#xff0c;主要是两大步 向url发起请求 这里注意找准对应资源的url&#xff0c;如果对应资源不让程序代码访问&#xff0c;这里可以伪装成浏览器发起请求。 解析上一步返回的源代码&#xff0c;从中提取想要的资源 这里解析看具体情况&#xff0c;一…

浅谈现代医院手术室IT供配电系统的设计与研究

安科瑞 华楠 &#xff3b;摘要&#xff3d; 随着人们的生活水平的不断提高&#xff0c;医疗条件的不断改善&#xff0c;人们对健康越来越重视同时对医疗条件的要求也越来越高&#xff0c;对医院手术室医疗设施提出了新的要求。以往医院普通手术室状况已不能满足人们的要求&…

腾讯云CVM服务器端口在安全组中打开!

腾讯云服务器CVM端口怎么开通&#xff1f;腾讯云服务器端口是通过配置安全组规则来开通的&#xff0c;腾讯云服务器网以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法&#xff0c;其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法&#xff0…