【问题标题】:Reliable Redis cache TTL expiration hook可靠的 Redis 缓存 TTL 过期挂钩
【发布时间】:2019-05-09 20:53:43
【问题描述】:

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

【问题讨论】:

    标签: azure-redis-cache redis-cache


    【解决方案1】:

    您可以使用Redis Pub/SubRedis Keyspace Notifications 组合客户端,让客户端在特定键发生事件或任何键发生特定事件时接收消息。然后,您可以使用pattern-matching subscriptions 接收多个密钥的消息。您还可以从单个客户端订阅多个频道;所有消息都包含要发布到哪个频道,以便您的客户可以决定要做什么。

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

    1. 使用 Azure 门户将 notify-keyspace-events 配置值设置为 Kx。为 Azure 设置值的步骤是 here。有关配置值架构的更多详细信息,请参见 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 到 keyevent 通道以获取过期的密钥:PSUBSCRIBE '__keyevent@*__:expired'
    3. 在另一个客户端,设置一个带有 TTL 的密钥:SET foo bar EX 5
    4. 5 秒后,在您的订阅客户端上看到一条消息:"pmessage","__keyevent@*__:expired","__keyevent@0__:expired","foo"

    为了客户快速开发和调试,我建议使用redis-cliRedis console in the Azure Portal

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

    【讨论】:

    • 非常感谢您的回答,是否可以获取 Key 的内容?就像您示例中的“栏”一样,我找不到访问内容的方法
    • 我不这么认为,因为 Redis 服务器在发送通知时已经删除了密钥。
    猜你喜欢
    • 2018-08-27
    • 2020-08-20
    • 2015-09-01
    • 2011-12-01
    • 2022-09-23
    • 1970-01-01
    • 2015-11-04
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多