Redis删除策略和淘汰策略[通俗易懂]

Redis删除策略和淘汰策略[通俗易懂]来的问题,Redis引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。实际上,在前面所说的删除策略,它针对的是expire命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?删除这批key中已过期的。……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Redis删除策略和淘汰策略[通俗易懂]
1.删除策略
        Redis 是一种内存级数据库,数据都存在内存中,但是针对于已经过期的数据,reids 不
会立刻删除只是会存储在 expires 中,当执行删除策略的时候,才会从 expires 中寻找对应的数据存储的地址,在存储空间中找到对应的数据进行删除。数据删除其实就是内存和 CPU 占用之间寻找平衡,CPU 才能去处理事情,针对过期数据,要进行删除的时候,一般有三种策略
1.1 定时删除
         顾名思义,当 key 设置有过期时间,时间到了,定时器任务立即执行删除,相当于消
耗 CPU 来减少内存使用,拿时间换空间。

优点:节约内存,到时就删除,快速释放掉不必要的内存占用
缺点:CPU 压力大,无论 CPU 此时负载量多高,都会去占用 CPU 进行 key 的删除
操作,会影响 Redis 服务器响应时间和吞吐量,是一种比较低效的方式
结论:用 CPU 性能换取内存空间,时间换空间

 

1.2 惰性删除
        就是说,数据到达过期时间的时候,先不做处理,等到下次访问数据的时候,进行访问,
如未过期,返回数据,如过期,则删除。这就相当于节约了 CPU 但占用了内存,拿空间换
时间。
优点:不占用 CPU 节约 CPU 性能,只在获取访问 key 的时候才判断是否过期,过期
则删除,只会删除当前获取的这一个 key,其他的 key 还是保持原样
缺点:内存占用大,如果一直没有获取它,那么数据就会长期占用内存空间,当有大量
的 key 没有被使用到,也造成了大量内存浪费,对内存数据库来说,也不太友好
结论:空间换时间

1.3 定期删除
        前面说的两种方案 1.时间换空间,2.空间换时间都是两个极端方法,为避免前面方案带
来的问题,Redis 引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询 Redis 库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。在 Redis 服务器初始化时,读取 server.hz 的值,默认值为 10。定时轮询服务器,每秒钟执行 server.hz 次 serverCron() 函数。databaseCron() 在后台轮询处理 16 个 redis 数据库的操作,如这里的过期key 的处理activeExpireCycle(),对每个数据库的 expire 空间进行检测,每次执行250ms/server.hz
 随机选取一批 expire 空间的 key(redis 有 16 个数据库,从 0 号数据库开始—15号数据库)
 删除这批 key 中已过期的。如果这批 key 中已过期的占比超过 25%,那么再重复执行步骤一。(循环到小于 25%结束当前数据库的删除)如果这批 key 中已过期的占比 ≤ 25%,检测下一个数据库的 expire 空间(current_db++) 用 info 命令查看相关配置参数

Redis删除策略和淘汰策略[通俗易懂]
每秒钟执行 hz 次 serverCron(),对服务器进行定时轮询
1.4 策略对比
1︰定时删除:
        节约内存,无占用,
        不分时段占用 CPU 资源,
        频度高,拿时间换空间
2:惰性删除:
        内存占用严重
        延时执行,
        CPU 利用率高拿空间换时间
3:定期删除:
        内存定期随机清理
        每秒花费固定的 CPU 资源维护内存
        随机抽查,重点抽查

2 淘汰/逐出策略
在 Redis 中经常会进行数据的增删查改操作,那么如果在添加数据的时候遇到了内存不足,该怎么办?在前面用的删除策略可以避免出现这种情况吗?
实际上,在前面所说的删除策略,它针对的是 expire 命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?
redis 执行命令之前,都会用 freeMemoryIfNeeded()方法,检测这次内存是否充足,如果不满足加入新数据,则会执行淘汰策略(淘汰未过期的数据)
2.1 配置文件

Redis删除策略和淘汰策略[通俗易懂]
2.2 分类
        检测带有时效性的数据进行淘汰(一般是有定时,会过期的数据的)
                 volatile-lru:挑选最近最少使用的数据淘汰
                 volatile-lfu:挑选最近使用次数最少的数据淘汰
                 volatile-ttl:挑选将要过期的数据淘汰
                 volatile-random:任意选择数据淘汰
        检测全库的数据进行淘汰
                 allkeys-lru:挑选最近最少使用的数据淘汰
                 allkeLyRs-lfu::挑选最近使用次数最少的数据淘汰
                 allkeys-random:任意选择数据淘汰,相当于随机

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179188.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 国内外常用公共NTP网络时间服务器地址

    国内外常用公共NTP网络时间服务器地址【腾讯云】热门云产品首单特惠秒杀,1核2G云服务器首年38元目录太长不看NTPPoolProjectNTP.ORG.CNNTP授时快速域名服务HSDN(HomeServerDataNetwork)本地服务器数据网络企业阿里巴巴腾讯微软苹果谷歌FacebookCloudflare高通HurricaneElectric飓风电气MSK-IX(MoscowInterneteXchange)莫斯科网络交换INTER…

  • navicat最新激活码_通用破解码

    navicat最新激活码_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • vue的render函数用法[通俗易懂]

    vue的render函数用法[通俗易懂]1.render简介前面我们的组件的模板都是在模板里写的(template),模板最后都会被vue编译成virtualdom(虚拟dom),在某些情况下模板可能不好用,例如需要实现一个动态的文章标题,根据父组件的level属性,动态的渲染成h1~hx标签,用模板写部分代码如下。<article-header:level=”1″>Helloworld</article-h…

    2022年10月31日
  • Jlink或者stlink用于SWD接口下载程序

    Jlink或者stlink用于SWD接口下载程序最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

  • ParameterizedThreadStart与ThreadStart的区别[通俗易懂]

    ParameterizedThreadStart与ThreadStart的区别[通俗易懂]classProgram  {    //publicstaticvoidCalculate()    //{    //  doubleDiameter=0.5;    //  Console.Write(“TheAreaOfCirclewithaDiameterof{0}is{1}”,Diame

  • 164. 可达性统计(拓扑排序+数位dp)[通俗易懂]

    164. 可达性统计(拓扑排序+数位dp)[通俗易懂]给定一张 N 个点 M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。输入格式第一行两个整数 N,M,接下来 M 行每行两个整数 x,y,表示从 x 到 y 的一条有向边。输出格式输出共 N 行,表示每个点能够到达的点的数量。数据范围1≤N,M≤30000输入样例:10 103 82 32 55 95 92 33 94 82 104 9输出样例:1633211111#include<bits/stdc++.h>using

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号