关于redis:redis-过期数据怎么处理

46次阅读

共计 758 个字符,预计需要花费 2 分钟才能阅读完成。

简略概念

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

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

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

AOF 文件如何解决

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

正文完
 0