似乎 NCacheCacheItem
在没有适当考虑SlidingExpiration
属性的情况下驱逐对象,也许当仅通过 OQL 或Tag
基于查找方法(例如GetByAllTags()
.
以下代码负责插入CacheItem
带有SlidingExpiration
属性的 。
CacheItem cacheItem = new CacheItem(model)
{
Tags = new[]
{
new Tag(WalletTransactionKeyName),
new Tag(TagOwnerId(model.OwnerId)),
},
SlidingExpiration = TimeSpan.FromDays(30),
Priority = CacheItemPriority.Default
};
Cache.Insert(BuildCacheKey(WalletTransactionKeyName, model.TransactionId), cacheItem);
下面的代码负责使用Tag
查找方法来访问对象,这也是唯一触及该CacheItem
对象的其他方法。
Hashtable results = Cache.GetByAllTags(
new[]
{
new Tag(WalletTransactionKeyName),
new Tag(TagOwnerId(ownerId))
});
if (results.Count == 0)
{
return new List<WalletTransactionModel>();
}
List<WalletTransactionModel> transactions = new List<WalletTransactionModel>(results.Count);
foreach (DictionaryEntry entry in results)
{
WalletTransactionModel transaction = entry.Value as WalletTransactionModel;
if (transaction == null)
{
continue;
}
transactions.Add(transaction);
}
transactions = transactions.OrderByDescending(t => t.TransactionDateTime).ToList();
return transactions;
预计该交易CacheItem
将在Cache
自上次访问以来至少存在 30 天,但是,它似乎在 12 小时内的某个时间被驱逐。