简略概念

在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 namenulllocal: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会做一下操作:

  1. 随机抽取20个过期属性的key。
  2. 删除曾经过期的key。
  3. 如果超过25%的key曾经过期了,就会从新执行第一个操作。

从这个算法来说,整个redis内存中,过期的数据会管制在25%以内。

AOF文件如何解决

在redis - 长久化提到,AOF会将redis执行过的命令追加到文件的开端。当一个键过期时,将在AOF文件中合成一个DEL操作,这样key在AOF中就显示曾经没有了。然而因为下面的被动过期机制,可能还会有25%的过期key在AOF文件中。