0

似乎 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 小时内的某个时间被驱逐。

4

1 回答 1

0

我在 Github 上遇到了同样的问题 - 你可能想看看下面的链接

https://github.com/Alachisoft/NCache/issues/33

于 2019-02-21T09:30:17.803 回答