Redis删除策略和逐出策略是什么

发布时间:2020-08-29 09:14:10 作者:小新
来源:亿速云 阅读:500

这篇文章主要介绍了Redis删除策略和逐出策略是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

过期数据

先来看三个key值,分别为sex、name、age。

这三个值设置的指令为 set name kaka setex age 100 24 setex sex 10 1

Redis删除策略和逐出策略是什么在redis中我们可以使用ttl来获取某个key的状态,下面我们来使用ttl分别获取一下上边name、age、sex的状态

可以看到出来了三个值,分别为 -1  775   -2

那么这三个值给出的信息是什么呢!

过期数据的存储结构

定时删除

定时删除就是写一个定时器,然后当key的时间过期后,定时器任务立即对过期的key进行删除

优点:可想而知key到期就删,肯定对内存时最友好的,节约内存

缺点:redis单线程的特性是所有的命令都在按照一定的顺序进行执行。key值到期就删cpu的压力就会变大,会直接影响到redis服务器响应时间和IO

定时删除就是用时间来换取空间

当执行完定时删除后,key值对应的数据会被删除,同时在过期的内存区里边也会直接删除。Redis删除策略和逐出策略是什么

惰性删除

在来看这个图当key值过期后不会直接删除,那是什么时候删除呢!继续往下看Redis删除策略和逐出策略是什么

当我们使用惰性删除时,数据到期了也不会自动删除,那么他的删除方式是,在下一次在获取这个key值时,会做一个判断,判断这个key是否过期,如果过期了在执行删除。

也就是说当再次执行get name时  会走一个函数expirelfNeeded()  这个函数就是判断此key是否过期的。过期的返回nil,然后从内存在进行删除

Redis删除策略和逐出策略是什么优点:会减少一定的CPU性能,只有到必须要删的时候才会删除

缺点:那肯定就是内存压力大了,例如一些热点新闻,热点过了就基本没人访问了,没有人访问这个key就一直存在,就会出现长期占用一定的内存空间

也就说这种方式是用空间换时间

定期删除

在上文中我们提及了俩种删除方式,一种是定时删除,一种是惰性删除。一个是用空间换时间。一个是用时间换空间。俩种方案都是比较极端的方式。那么接下来我们在来看看定期删除的实现方案。

先来看一下redis的存储空间,一共有默认为16个,在redis.conf里边有一个配置参数database这个参数控制的。每个数据库都有自己的过期分区,里边存储就是数据地址  和  数据过期时间。

Redis删除策略和逐出策略是什么实现方式

redis在启动时,会取读取server下的hz的值,默认为10。这个值直接在终端使用info server就可以查看的到

Redis删除策略和逐出策略是什么然后会每秒钟执行server下hz次  进行serverCron()轮询

继续使用databasesCron对redis的16个库进行挨个访问信息

访问时候会再执行activeExpireCycel对每个expires[*]逐一进行检测,每个执行的时间为250ms / server hz这个参数

在对每个expirs[*]逐一检测时,会随机拿出ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC个可以进行检测

那么现在问题来了,我们的250ms / hz这个时间执行完了,但是把expires的16个数据库没有循环完怎么办呢!  下次来在循环那个库呢!  其实这个值是有存的,就是current_db这个值。这个值会记录activeExpireCycel 下次进入那个expires[*]执行Redis删除策略和逐出策略是什么特点1:CPU使用没有高峰值,检测频率自定义设置

特点2:内存压力不会很大, 长时间占用的内存会被持续的清理

逐出算法

在上文中我们说了三种删除策略,但是这三种策略都是相对于设置了有效期的key才会有效。

那现在我们的redis使用的内存不足了,就会使用逐出策略来保证redis的正常使用。

redis在每次执行命令前会调用freeMemorylfNeeded()检测内存是否充足,当不充足时就会清理一些key,这种清除数据的策略称为逐出策略。

redis最大可使用内存的参数为:maxmemory  默认为0   指的是占用物理内存的比例   一般设置50%就可以了

每次选取待删除key的个数:maxmemory-samples

删除策略:maxmemory-policy

「下面我们来着重说明删除策略」

接下来看一幅图

感谢你能够认真阅读完这篇文章,希望小编分享Redis删除策略和逐出策略是什么内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!

推荐阅读:
  1. redis实现数据删除策略和逐出算法
  2. redis数据淘汰策略指的是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

redis edi %d

上一篇:Redis持久化是什么意思

下一篇:Redis主从复制原理是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》