Похоже, что NCache высвобождает CacheItem
объекты без должного учета свойства 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-часового периода. .