StackExchange.Redis是否有能力在缓存项目过期后执行回调? 与Microsoft.Practices.EnterpriseLibrary.Caching中的ICacheItemRefreshAction类似
[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();
}
}
答案 0 :(得分:2)
这是不可能的(或者它可能非常不可靠),因为当密钥到期时, Redis 对其内置键空间事件有一些限制({} {3}}):
过期事件的时间
具有生存时间关联的密钥由Redis以两种方式过期:
- 当命令访问密钥并且发现它已过期时。
- 通过后台系统在后台逐步查找过期的密钥,以便能够收集从不的密钥 访问。
因此,你想要的根本不可靠。如果您想在某个缓存密钥过期后重新引入数据但 Redis 告诉您所谓的密钥已经过期这么晚会发生什么?
另一方面, Redis 键空间通知使用常规 pubsub 通道实现, Redis pubsub通过射后不理的。如果 Redis 想要通知它时,监听密钥到期的过程无效,会发生什么?
我建议您使用任务计划程序更好地解决问题,而不是依赖于 Redis 。
即使您不能依赖关于密钥到期的通知,我也会说内置的到期系统非常强大。
示例用例可能是您需要向用户公开一组数据,并且这些用户每小时访问该数据集的次数很多。
也就是说,您将所谓的数据集添加到 Redis ,并且您将过期时间设置为2小时,并且由于整个数据不会发生太大变化,因此您的用户不会在 Redis 中缓存数据时访问主数据。
数据过期后,直到没有大量用户访问数据, Redis 没有缓存。
expire
命令有很多用例,但我再说,根据缓存过期实时采取行动并不好。
...很久以前检查Q& A I openen,你会找到一个关于如何订阅keypace pubsub频道的示例代码: