StackExchange.Redis有能力在缓存项过期后执行回调吗?喜欢ICacheItemRefreshAction in Microsoft.Practices.EnterpriseLibrary.Caching
[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();
}
}发布于 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很久以前就打开了,您可以在这里找到关于如何订阅密钥空间公共子通道的示例代码:
https://stackoverflow.com/questions/28877242
复制相似问题