可靠的 Redis 缓存 TTL 过期钩子

Reliable Redis cache TTL expiration hook

Azure Redis 缓存是否允许我设置一个函数,以便在缓存中的某个键过期时可靠地触发?

您可以使用 Redis Pub/Sub and Redis Keyspace Notifications to have a client receive a message when events happen to specific keys, or when specific events happen to any key. You can then use pattern-matching subscriptions 组合客户端以接收多个密钥的消息。您还可以从一个客户端订阅多个频道;所有消息都包括它发布到哪个频道,以便您的客户可以决定要做什么。

要在任何以 foo 开头的密钥过期时收到消息,请执行以下操作:

  1. 使用 Azure 门户将 notify-keyspace-events 配置值设置为 Kx。为 Azure 设置值的步骤是 here. More details on the config value schema are defined here.
  2. 使用您选择的客户端,PSUBSCRIBE(模式订阅)您的密钥频道:PSUBSCRIBE '__keyspace@*__:foo*'
  3. 使用另一个客户端连接,使用 TTL 为您的密钥设置一个值:SET foo42 bar EX 5
  4. 5 秒后,您应该会在订阅客户端上看到一条消息:"pmessage","__keyspace@*__:foo*","__keyspace@0__:foo42","expired"

要在任何密钥过期时收到消息,请执行以下操作:

  1. notify-keyspace-events 配置值设置为 Ex
  2. PSUBSCRIBE 密钥事件通道以获取已过期的密钥:PSUBSCRIBE '__keyevent@*__:expired'
  3. 在另一个客户端中,设置一个带有 TTL 的密钥:SET foo bar EX 5
  4. 5 秒后,在您的订阅客户端上看到一条消息:"pmessage","__keyevent@*__:expired","__keyevent@0__:expired","foo"

为了客户快速开发和调试,我会推荐使用redis-cli or the Redis console in the Azure Portal

希望这对您有所帮助。祝你好运!