专注JavaWeb开发 首页制式『默认式 OR 时间轴 网站地图|RSS订阅|设为首页|加入收藏
当前位置:首页 >数据库 >NoSQL > 正文

Redis key过期机制(失效的key不会立即删除)

来源: 开源中国 作者: 开源中国 发布时间: 2016-05-25 浏览次数:

Redis是一个 高性能的key-value数据库.我们可以对其中的key设置一个过期时间,相关命令如下:

1.在创建一个key value 的时候同时设置过期时间

比如: set key1 value1 EX 60 表示: 我们想要将这个 key value 放到redis中,并在其中保存60秒.

set key2 value2 PX 60 表示:我们想要将这个key value放到redis中,并在其中保存 60毫秒

2.对于已经存在的key value, 

比如: 事先有 set key3 value3

我们想为 key3 设置一个过期时间, 我们可以采用以下命令:  

expire  key3 60  表示: 我们要对已经存在的kye3 设置为 在 60秒之后(无效,或者被删除)

我们可以查看一个key当前的 存活(有效?)时间.

使用ttl key4 即可查看剩余有效时间.

设置一个key的有效期为60秒,在60秒内将计算机的时间改到1分钟之后,那么这个key 马上失效(突然联想到之前有些应用时间过了就用不了了....so... ) 


所以, 在我们每次用get 命令去取一个key的时候,先把key找到,再判断这个key是否已经过期(自动联想我们看一个面包是否已经过期...).如果已经过期了, redis就不给我们返回对应的value值了. 这是redis 处理key过期的active方式, 但是 仅仅依靠这种方式是不够的,可以想象,假如,我们放置很多具有有效期的key value在redis中,仅仅是每次都判断一个key是否已经过期,那么到最后,系统中就会存在许多垃圾(已经过期,但是又没有人去清理...). 所以,redis,还会每秒钟执行10次以下的流程:

1.随机抽取100个设定了有效期的key,检查其有效期,如果已经过期,则将其删除.

2.如果抽取到的100个key中超过25个已经过期,那么返回步骤1,

这就是redis中清除已经过期的key的 passive 方法.

=====================================

可能会影响(或者使用者觉得会影响)key有效期的操作.

1.会删除有效期的操作.

 del 命令.

expire命令

set 命令

getset 命令

redis删除已过期节点时对于  aof文件以及 主从节点集群时的处理方式

当一个key过期时,redis会同步删除对应的aof文件,假如key分布在主从集群的节点时, 也会同步删除 对应的 slaves上的key.值得注意的是, slaves不会主动删除已经过期的key,而会一直等待master的删除命令. 只有当一个slave成为了master之后,才会主动删除已经过期的key.


QQ群: 武汉地区(142173356)验证消息JavaWeb1024

网友共有【】评论,点击查看


相关新闻:


x 微信关注我们 随时获取最新网站资讯