Понимание кешей памяти в C# - PullRequest
0 голосов
/ 20 апреля 2020

Я довольно новичок в 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 минут

Проблема, с которой я сейчас сталкиваюсь, состоит в том, что данные моего кэша не равны данным в моей базе данных, что должно быть. Это заставляет меня думать, что данные не истекают должным образом. И почему кэшированные данные были бы полезны в первую очередь, почему бы просто не извлечь правильные данные из базы данных?

1 Ответ

0 голосов
/ 20 апреля 2020

Полагаю, InventoryCache относится к типу MemoryCache.

. Причина, по которой срок действия данных не истекает, может заключаться в том, что вы обновляете кэш, вызывая setInventoryCache несколько раз с одним и тем же cacheKey и данными .

Причина, по которой ваши данные в базе данных и кэшированные данные не совпадают c по своей природе - это кэш. Итак, вам нужно реализовать механизм, который обновляет / делает недействительным кеш, если данные изменились. Для этого нет идеального общего способа.

Конечно, вы всегда можете извлекать данные из базы данных, не используя кеш. Это зависит от того, как часто вам нужны данные и как часто они меняются, имеет ли смысл использовать кеш или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...