【问题标题】:Understanding memory caches in C#了解 C# 中的内存缓存
【发布时间】:2020-08-03 07:23:16
【问题描述】:

我对 C# 还很陌生,我正在尝试了解以下方法的作用,作为我不再使用它的同事,我创建了它。

public static void setInventoryCache(string type, string att, int id, float val)
{
    string cacheKey = "inv-" + type + "-" + att + "-" + id.ToString();
    debugLog("set " + cacheKey + " = " + val);

    // expire cached items randomly so they don't all expire at the same time and need to be
    // re-cached
    int expire = random.Next(30, 90);
    CacheItemPolicy cip = new CacheItemPolicy
    {
        RemovedCallback = new CacheEntryRemovedCallback(removeCallBack),
        AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(expire),                    
    };

    InventoryCache.Set(cacheKey, val, cip);
}

在我看来,缓存被告知每 30-90 分钟过期一次。它是否正确?因为在我的程序中,它似乎仍然会抓取旧的缓存数据,即使它已经超过 90 分钟了

我目前遇到的问题是我的缓存数据不等于我的数据库中的数据,它应该是。这让我觉得数据没有正确过期。为什么缓存的数据一开始会有用,为什么不只是从数据库中提取数据是正确的?

【问题讨论】:

    标签: c# asp.net-mvc caching


    【解决方案1】:

    我假设 InventoryCache 来自类型 MemoryCache

    数据没有过期的原因可能是你通过多次调用setInventoryCache使用相同的cacheKey和数据来更新缓存。

    您在数据库中的数据与缓存数据不同步的原因本质上是 - 它是一个缓存。因此,如果数据已更改,您需要实现一种刷新/使缓存无效的机制。没有通用的完美方法。

    当然,您可以随时从数据库中获取数据,而无需使用缓存。这取决于您需要数据的频率以及数据更改的频率,以及使用缓存是否有意义。

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2016-01-14
      • 2011-03-12
      相关资源
      最近更新 更多