简单概念
在redis中,通常情况下,当我们设置一个key的时候,会一直存在的,直到我们用del命令删除。如果我们需要为一个key设置过期的时间,我们会用到EXPIRE命令,执行后会返回0或者1。0表示所设置的key不存在,1表示设置成功。
local:0>expire name 100
"0"
local:0>set name zhangsan
"OK"
local:0>expire name 100
"1"
当我们执行del或者set操作时,会时过期时间失效。
local:0>get name
null
local:0>set name zhangsan
"OK"
local:0>expire name 100
"1"
local:0>ttl name
"98"
local:0>set name lisi
"OK"
local:0>ttl name
"-1"
过期方式
redis的过期有两种方式:主动过期和被动过期。
被动过期
被动过期是指,当客户端访问一个key时,会看他是否设置了过期的时间,如果设置了,再看是否已经过期了,如果过期了,把key删除掉,并返回null。
主动过期
如果仅仅靠被动过期,导致已经过期的key不再访问,会使这些key一直占用内存,浪费内存空间,所以redis也有主动过期的方式,每隔10秒,redis会做一下操作:
- 随机抽取20个过期属性的key。
- 删除已经过期的key。
- 如果超过25%的key已经过期了,就会重新执行第一个操作。
从这个算法来说,整个redis内存中,过期的数据会控制在25%以内。
AOF文件如何处理
在redis - 持久化提到,AOF会将redis执行过的命令追加到文件的末尾。当一个键过期时,将在AOF文件中合成一个DEL操作,这样key在AOF中就显示已经没有了。但是由于上面的主动过期机制,可能还会有25%的过期key在AOF文件中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。