当前位置:   article > 正文

redis的删除(过期)原理_redis 过期原理

redis 过期原理

一、存储结构

通过expire,expireat,pexpire,pexpireat命令对key添加过期时间

expire key seconds # 设置键在给定秒后过期
pexpire key milliseconds # 设置键在给定毫秒后过期

expireat key timestamp # 到达指定秒数时间戳之后键过期
pexpireat key timestamp # 到达指定毫秒数时间戳之后键过期
 

redis使用的过期键值删除策略是:惰性删除加上定期删除,两者配合使用。

在redis中有一个单独的空间专门存储expire的数据,expire是以hash的数据结构存储的

expires 是hash 的key,原数据的存储地址是hash的field,设置的过期时间则是hash的value

二、redis数据删除策略

redis有三种数据删除策略,分别是定时删除、惰性删除、定期删除

1.定时删除

创建一个定时器,当key设置有过期时间且过期时间到达时,由定时器任务立即执行对键的删除操作

优点:节省内存,快速释放

缺点:cpu压力大,删除操作会影响redis响应时间和吞吐量

2.惰性删除

数据到达过期时间时不删除,等到下次访问到该数据时删除

在所有get命令执行之前都会先执行expireIfNeed()方法,

优点:节约cpu性能,过期的时候不会立即删除

缺点:内存空间占用过多,很多已经过期的数据可能长期占用内存

3.定期删除

3.1定期删除的过程

redis启动服务器初始化时,会读取配置文件中的hz的值,默认为10

hz表示每秒执行serverCron()的次数

serverCron()方法里会执行databaseCron()方法,databaseCron()的功能就是遍历16个redis的数据库

同时databaseCron()方法还调用了activeExpireCycle()

1.activeExpireCycle()对每个数据库内的expires逐一进行检测,每次执行250ms/hz

2.对某个expires检测时,随机挑选W个key进行检测

3.如果key超时,则删除key

4.如果删除的key的数量>W*25%,则回到步骤2

5.如果删除的key的数量<W*25%,则开始检测下一个expires

其中W的值由ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值决定

当前activeExpireCron()方法执行到哪个数据库会存储到current_db中

当activeExpireCycle()执行时间到期,下次会从current_db记录的地方继续执行

3.2定期删除特点

占用固定的cpu资源来进行检查和删除过期数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/353132
推荐阅读
相关标签
  

闽ICP备14008679号