如何自动从集合中删除过期的密钥?

时间:2016-12-07 13:19:37

标签: redis

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_mine_shaft" android:state_pressed="true"/>
    <item android:drawable="@drawable/button_dove_gray"/>
</selector>

密钥已过期,但密钥在内部设置。我必须在redis中自动删除过期密钥

2 个答案:

答案 0 :(得分:1)

您无法在SET内的个别成员上设置TTL。

此博客文章深入探讨了该问题,并提供了一些解决方法。 https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/

希望有所帮助。

答案 1 :(得分:1)

请完整准备此页面:https://redis.io/topics/notifications

总结一下,您必须有一个哨点程序来监听PUB/SUB条消息,并且您必须更改redis.conf文件以启用 keyevent到期通知

redis.conf中的

notify-keyspace-events Ex
  

为了启用该功能,使用非空字符串,由...组成   多个字符,每个字符都有特殊含义   根据下表

E     Keyevent events, published with __keyevent@<db>__ prefix.
x     Expired events (events generated every time a key expires)

如果你的数据库是__keyevent@0__:del,那么sentinel程序必须收听频道0。如果使用除零之外的其他任何内容,请更改数据库编号。

然后,当您订阅该频道并收到即将到期的key时,您只需发出SREM trending_mints key即可将其从该集合中删除。

重要

  

访问并找到密钥时会生成过期事件   由上述系统中的一个系统过期,因此没有   保证Redis服务器能够生成过期   关键生存时间达到零值时的事件。

     

如果没有命令持续定位该键,并且有许多键   与TTL相关联,可能会在时间之间出现明显的延迟   生活的关键时间降至零,以及过期事件的时间   生成。

     

Redis服务器删除时会生成基本过期的事件   关键,而不是在理论上生活的时间达到价值   为零。

因此, 键会因为到期而被删除,但是在TTL到达零的时刻, 通知

ALSO ,如果您的哨兵节目错过了PUB/SUB消息,那么......就是这样,您将不会再收到通知! (这也在上面的链接上)