Redis过期机制

Redis的expire命令在设置key后,还可以设置该key以秒为单位的过期时间,比如设置了jianshu的key后,执行 expire jianshu 60 命令,这将key为jianshu的字符串设置了60秒的过期时间。那么问题来了:Redis中有那么多的key,它是如何确定那些已经过期的key呢?
Redis以两种方式处理key的过期问题:被动方式(passive way)和主动方式(active way)。
被动方式:也称为惰性删除,指定的是某个key虽然已经过期,但是Redis并不将其从服务器上真正删除,而是等到该key再次被查询的时候再判断是否过期,如果过期则删除该key并返回null。
看到这,很多人会疑问对于那些设置过期时间后不再访问的key会不会一直留在Redis中?答案是并不会,这涉及到下面这种方式
主动方式:也称为定期删除,Redis每秒会做10次随机抽取,做如下处理:
1.随机从已设置过期时间的key中抽取20个key,从中删除所有已过期的key;
2.统计抽取到的这20个key,如果已过期的key占比超过25%,那么继续执行第一步。
通过上面两种方式,Redis即保证了不被大量已过期key挤爆内存,也不会为了删除过期的key而占用过多的CPU时间。

相关内容请参见Redis官方文档 :https://redis.io/commands/expire

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文对Redis的过期机制简单的讲解一下讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为...
    小陈阿飞阅读 1,392评论 0 0
  • 五种数据结构简介 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象,通过结构体...
    彦帧阅读 7,205评论 0 14
  • 本文对Redis的过期机制简单的讲解一下讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为...
    流蓝浅阅读 4,128评论 0 2
  • redis是一个以key-value存储的非关系型数据库。有五种数据类型,string、hashes、list、s...
    林ze宏阅读 1,128评论 0 0
  • 今天一个在网上认识的朋友给我发了一条短信,内容是我和他通过网络认识了五年了,他说五年了,我们应该算是老朋友了,...
    ZYSYZY阅读 560评论 0 1

友情链接更多精彩内容