可靠的 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
开头的密钥过期时收到消息,请执行以下操作:
- 使用 Azure 门户将
notify-keyspace-events
配置值设置为 Kx
。为 Azure 设置值的步骤是 here. More details on the config value schema are defined here.
- 使用您选择的客户端,PSUBSCRIBE(模式订阅)您的密钥频道:
PSUBSCRIBE '__keyspace@*__:foo*'
- 使用另一个客户端连接,使用 TTL 为您的密钥设置一个值:
SET foo42 bar EX 5
- 5 秒后,您应该会在订阅客户端上看到一条消息:
"pmessage","__keyspace@*__:foo*","__keyspace@0__:foo42","expired"
要在任何密钥过期时收到消息,请执行以下操作:
- 将
notify-keyspace-events
配置值设置为 Ex
- PSUBSCRIBE 密钥事件通道以获取已过期的密钥:
PSUBSCRIBE '__keyevent@*__:expired'
- 在另一个客户端中,设置一个带有 TTL 的密钥:
SET foo bar EX 5
- 5 秒后,在您的订阅客户端上看到一条消息:
"pmessage","__keyevent@*__:expired","__keyevent@0__:expired","foo"
为了客户快速开发和调试,我会推荐使用redis-cli or the Redis console in the Azure Portal。
希望这对您有所帮助。祝你好运!
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
开头的密钥过期时收到消息,请执行以下操作:
- 使用 Azure 门户将
notify-keyspace-events
配置值设置为Kx
。为 Azure 设置值的步骤是 here. More details on the config value schema are defined here. - 使用您选择的客户端,PSUBSCRIBE(模式订阅)您的密钥频道:
PSUBSCRIBE '__keyspace@*__:foo*'
- 使用另一个客户端连接,使用 TTL 为您的密钥设置一个值:
SET foo42 bar EX 5
- 5 秒后,您应该会在订阅客户端上看到一条消息:
"pmessage","__keyspace@*__:foo*","__keyspace@0__:foo42","expired"
要在任何密钥过期时收到消息,请执行以下操作:
- 将
notify-keyspace-events
配置值设置为Ex
- PSUBSCRIBE 密钥事件通道以获取已过期的密钥:
PSUBSCRIBE '__keyevent@*__:expired'
- 在另一个客户端中,设置一个带有 TTL 的密钥:
SET foo bar EX 5
- 5 秒后,在您的订阅客户端上看到一条消息:
"pmessage","__keyevent@*__:expired","__keyevent@0__:expired","foo"
为了客户快速开发和调试,我会推荐使用redis-cli or the Redis console in the Azure Portal。
希望这对您有所帮助。祝你好运!