当前位置: 首页 > 面试题库 >

Redis如何使密钥失效?

隆选
2023-03-14
问题内容

Redis如何实现密钥过期?从这里我了解到Redis存储了密钥将过期的时间,但是这是如何实现的呢?


问题答案:

简而言之-每个Redis对象都有一个过期时间。除非您将对象设置为过期,否则该时间为“从不”。

现在,到期机制本身是半延迟的。延迟过期意味着您实际上不会在读取对象之前使它们过期。读取对象时,我们检查它的过期时间戳记,如果它是过去的,则不返回任何内容,并在到达该对象时删除该对象。但是问题在于,如果永不触摸键,它只会无缘无故地占用内存。

因此,Redis添加了第二层随机活动到期时间。它只是一直读取随机密钥,并且当触摸过期密钥时,它会根据惰性机制被删除。这不会影响过期行为,它仅添加过期密钥的“垃圾回收”。

当然,实际的实现要比这复杂得多,但这是主要思想。

您可以在此处了解更多信息:http :
//redis.io/commands/expire

并且可以在此处找到有效到期周期的源代码:https
:
//github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98



 类似资料:
  • 问题内容: 我使用redis来存储用户信息。 我在“用户”键下设置了许多用途的信息,如下所示: 如何使用户中的键“ userid1234”在几秒钟后失效? 有一些像“过期”的命令,只能设置用户的超时时间,但我不希望它全部过期。 有什么解决办法吗? 问题答案: 不,这是不可能的。生活在钥匙上,而不是成员上。而且这不会改变。 有关如何处理此问题的信息,请在此处阅读Josiah Carlson的建议。我

  • 问题内容: 我想删除与“用户*”匹配的键。 我如何在Redis命令行中做到这一点? 问题答案: 此功能目前无法一口气完成(请参阅文档中的注释)。不幸的是,您只能使用,遍历结果,然后使用来删除每个结果。 怎么样使用bash来帮助? 要逐步执行: -获取所有键并使用awk删除不需要的多余文本。 -为每一个创建一个echo语句以将其删除。 -使用DEL语句,然后将它们传递回cli。 不建议这样做是最好的

  • 问题内容: 假设我在, 我想抽出时间来创作。是否有类似的东西 ? 问题答案: Redis不存储此信息。 您可以使用单独的密钥:

  • 问题内容: 使用&等redis expire 命令时,在某些情况下根本不需要键来保存值,因为 生存时间 就是这样。 __ 但是,redis要求任何键具有值。 如果您不想阅读它,最合理的使用价值是什么? 问题答案: 谁说您实际上应该在Redis密钥中存储任何内容? 空字符串是redis密钥的完美有效值,并且它是最短的一个:

  • 问题内容: 我正在使用此代码: 在my_set中插入“ el1”。sadd仅返回插入元素的数量。我需要的是插入元素的键,以便以后可以检索它。我确信有一种我不知道的方法。难道是正确的功能,还是我应该选择其他类似设置/获取? 编辑:我需要类似mysql中的auto_increment键。当我插入一些东西时,获取最后插入的元素以备将来使用。 我需要这样的东西: 所以我可以使用key = 1获得数组 问题

  • 问题内容: 我可以使用连接的redis-cli复制密钥吗,redis中是否预定义了任何命令? 将FSS_SYSAGENT复制到FSS_SYSAGENTDuplicate。 10.44.112.213:6403> hgetall FSS_SYSAGENT 1)“ SYSTEM_01” 2)“ {\” port \“:\” 4407 \“,\” ipAddress \“:\” 10.44.112.21