查看redis时效_【数据库】Redis(三)过期策略与淘汰策略

本文介绍了Redis中数据的过期策略,包括定时删除、惰性删除和定期删除,并分析了各自的优缺点。同时,讨论了Redis的数据淘汰策略,当内存不足时如何选择淘汰数据,如LRU、LFU、TTL等策略,并提到了`noeviction`策略表示禁止淘汰。
摘要由CSDN通过智能技术生成

Redis的数据过期策略

3f5cc811aa3b2b53f6f0c243a045325b.png

    Redis中的key按照其有效性可以分为如下三种:永久有效的数据,具有时效性的数据,已经过期的数据。我们可以通过ttl指令来查看key的时效性。示例如下:

127.0.0.1:6379> set name linxiaoliOK127.0.0.1:6379> setex age 60 20OK127.0.0.1:6379> ttl name(integer) -1127.0.0.1:6379> ttl age(integer) 33127.0.0.1:6379> ttl age(integer) 18127.0.0.1:6379> ttl age(integer) 3127.0.0.1:6379> ttl age(integer) -2127.0.0.1:6379> get age(nil)

ttl key:

    返回正数:表明具有时效性的数据,返回的数值代表剩余有效时长。

    返回-1:代表永久有效

    返回-2:代表已经过期的数据

    我们今天说的数据过期主要指的是这些已经过期的策略,在这里需要区分一个概念,数据过期不等于数据已经被redis干掉了,下面研究的主题就是对于这些过期的数据,redis是如何把他们“收割”(删除)的。redis的数据过期策略主要分为三种,定时删除,惰性删除,过期删除。下面分别进行描述。

3f5cc811aa3b2b53f6f0c243a045325b.png

01

定时删除

一、含义    

    在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,执行定时器任务对key进行删除。

二、优点

    节约内存,到时间了就删除,快速释放掉不必要的内存占用。

三、缺点

    CPU压力很大时,redis仍执行删除操作,会影响redis服务器的响应时间和指令吞吐。

四、总结

    用处理器性能换取内存空间

3afe4c79092f5bbcba45f7e4fe193d1c.gif

02

惰性删除

一、含义    

    数据到达过期时间时,不做处理,当下次访问该数据时,如果未过期,返回数据,过期则删除。

二、优点

    节约CPU性能,发现必须删除的数据时才做删除。

三、缺点

    内存压力很大,出现长期占用内存的数据。

四、总结

    用内存空间换取处理器性能。

3afe4c79092f5bbcba45f7e4fe193d1c.gif

03

定期删除

一、Redis的存储空间

    redis有标号为0到15个数据库,每个数据库中有一个字典,存储了键地址编号的过期时间,比如expires[0]中通过key-value的形式(o2000   158383)存储了地址(key)的过期时间。

二、定期删除的过程

1、redis启动服务器初始化时,读取配置文件中server.hz的值,默认为10。server.hz的含义为每秒执行serverCron()函数的次数。

2、serverCron()调用databasesCron()函数,databasesCron()函数遍历16个数据库。之后调用activeExpireCycle()函数

3、activeExpireCycle()函数对每个0到15号数据库中过期字段中的键进行检测,检测时,随机挑选W个key,如果挑选的key过期了,则删除,如果删除的key数量大于W的1/4,则循环该过程,否则检查下一号数据库。

三、特点

    定期删除相当于在定时删除和惰性删除做了折中处理,内存定期随机清理,即保证了Redis服务器处理数据的性能,又在CPU占用上有所优化。

3afe4c79092f5bbcba45f7e4fe193d1c.gif

Redis的数据淘汰策略

3f5cc811aa3b2b53f6f0c243a045325b.png

    上面我们提到的数据删除策略指的是当redis中的key过期之后,Redis对过期数据的删除。而Redis的数据淘汰策略要解决的问题是当新的数据要进入Redis,而此时Redis的可用内存不足,Redis会执行数据淘汰策略,把内存中的一些数据清除,以便使新的数据能够进入。

3f5cc811aa3b2b53f6f0c243a045325b.png

影响数据淘汰策略的相关配置:引言中提到,当Redis使用的内存不足时会执行数据淘汰策略,那么配置文件肯定有一个表示内存的阈值,maxmemory,当实际内存超过maxmemory的值时,会触发数据淘汰策略;其次,还有一个参数maxmemory-samples用来表示每次需要淘汰数据的个数。接下来我们看具体的淘汰策略。

9ceb99333b847b54725645e8fc732ca5.gif

检测易失数据

    当某个key被设置了过期时间之后,就会把key以及它的过期时间存储到一个独立的字典中(server.db[i].expires),检测易失数据主要是在这个字典中寻找要淘汰的数据。有以下4种策略

lru:least recently used 最久没有使用

lfu:least frequently used   使用频率最小

1、volatile-lru:挑选最久没有使用的数据进行淘汰

2、volatile-lfu:挑选使用频率最少的数据进行淘汰

3、volatile-ttl:挑选马上要过期的数据进行淘汰

4、volatile-random:随机挑选数据进行淘汰

检测全库数据

    检测全库数据就是在整个Redis的数据库中寻找要淘汰的数据,有如下3种策略:

1、allkeys-lru:挑选最久没有使用的数据进行淘汰

2、allkeys-lfu:挑选使用频率最少的数据进行淘汰

3、all-keys-random:随机挑选数据进行淘汰

(助记:全库数据可能存在永久有效的数据,所以没有ttl)

放弃数据淘汰策略

noeviction:禁止进行数据淘汰策略,此时会引发OOM

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值