首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StackExchange.Redis中的过期回调

StackExchange.Redis中的过期回调
EN

Stack Overflow用户
提问于 2015-03-05 11:51:35
回答 1查看 5.1K关注 0票数 4

StackExchange.Redis有能力在缓存项过期后执行回调吗?喜欢ICacheItemRefreshAction in Microsoft.Practices.EnterpriseLibrary.Caching

代码语言:javascript
复制
    [Serializable]
    private class CacheEventHandler : ICacheItemRefreshAction
    {
        public void Refresh(string key, object expiredValue, CacheItemRemovedReason removalReason)
        {
            // Item has been removed from cache. Perform desired actions here, based upon
            // the removal reason (e.g. refresh the cache with the item).
            ResetStaticData();
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 12:55:50

这是不可能的(或者它可能非常不可靠),因为Redis的内置键空间事件在密钥过期时引发事件(在这里了解更多)时有一些限制:

过期事件的时间安排 Redis以两种方式过期了与存活时间相关的键:

  • 当键被命令访问并被发现过期时。
  • 通过在后台查找过期密钥的后台系统,递增地查找过期密钥,以便也能够收集从未访问过的密钥。

因此,你想要的根本就不可靠。如果您想在缓存的密钥过期后重新引入数据,但Redis告诉您,所谓的密钥过期得太晚了,会发生什么?

另一方面,Redis键空间通知是使用常规的pubsub通道实现的,Redis pubsub是通过触发和遗忘的概念实现的。如果当Redis想通知它时,监听关键呼气期的过程不起作用,会发生什么情况?

我建议您最好使用任务调度程序来解决这个问题,而不是依赖Redis来解决这个问题。

何时依赖内置过期系统?

即使您不能依赖关键到期的通知,我也会说内置的过期系统非常强大。

一个示例用例可能是,您需要向用户公开一组数据,这些用户每小时访问该数据集的次数很多。

也就是说,将所谓的数据集添加到Redis中,并将过期时间设置为2小时,而且由于整个数据变化不大,用户将无法访问主数据,而数据则缓存在Redis中。

在数据过期后,除非没有多少用户访问数据,否则Redis没有缓存。

expire命令有很多用例,但我要再说一遍,基于缓存过期的实时操作是不好的。

如果你想走这条路..。

...check a Q&A I很久以前就打开了,您可以在这里找到关于如何订阅密钥空间公共子通道的示例代码:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28877242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档