我们在并置模式下运行 Azure 缓存(预览版),我们注意到有时无法在缓存中找到项目或过早过期。
为了更好地理解我的问题,请查看我们日志中的以下输出
2012-07-26 03:14:15,093 [13] DEBUG XXX.CacheBase - Update: XXX-CacheKey-XXX | Abs Exp: 07/26/2012 04:15:15 +00:00 | Sli Exp: 00:00:00
2012-07-26 03:14:17,452 [22] DEBUG XXX.CacheBase - PessimisticFetch - XXX-CacheKey-XXX
2012-07-26 03:24:32,229 [23] DEBUG XXX.CacheBase - PessimisticFetch - XXX-CacheKey-XXX
2012-07-26 03:24:32,245 [23] DEBUG XXX.SomeClass - Item not found in cache: XXX-CacheKey-XXX
说明:
- 第 1 行:插入到具有绝对过期时间的缓存中,注意绝对 ex
- 第 2 行:大约一分钟后获取 - 确定
- 第 3 行:大约 10 分钟后获取 - 未找到
- 第 4 行:报告的项目在缓存中未找到
简而言之,我们使用 GetAndLock / PutAndLock 来存储这些特定项目。这些项目有一个绝对过期时间(1 小时),但从 5 到 10 分钟后,该项目不再在缓存中。
我的 CacheItemPolicy 更令人不安的是我设置了一个删除通知,但这永远不会被触发
//---
cacheItemPolicy.RemovedCallback = ItemRemoved;
//---
static void ItemRemoved(CacheEntryRemovedArguments args)
{
_log.DebugFormat("Item evicted from cache: {0}. Reason: {1}", args.CacheItem.Key, args.RemovedReason);
}
我还附上了我们缓存设置的屏幕截图参见图片-> http://i.stack.imgur.com/4ORQQ.jpg
我已经没有什么想法了......任何线索解释,WTF的将不胜感激:)