C# кэш не синхронизируется c с базой данных sql - PullRequest
0 голосов
/ 20 апреля 2020

мои кэши в моей MVC системе внезапно перестают синхронизироваться c с моей базой данных, и я не уверен, почему.

Я вызываю свой метод getInventoryCache, например,

public int On_Order_Count(Boolean dynamic, bool useCache)
        {
            if (!dynamic)
                return On_Job_Order;
            float? cacheValue = IGT.getInventoryCache("item", "OO", ID);
            if (cacheValue != null && useCache)
                return (int)Math.Ceiling((float)cacheValue);
        }

Вот мой метод получения инвентаризации

public static float? getInventoryCache(string type, string att, int id)
        {
            string cacheKey = "inv-" + type + "-" + att + "-" + id.ToString();
            if (InventoryCache.Contains(cacheKey))
            {
                debugLog("get " + cacheKey + ": "+InventoryCache[cacheKey]);
                return (float)InventoryCache[cacheKey];
            }
            return null;
        }

, а вот мой метод инвентаризации набора

    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);            
        }

Мои кэши больше не соответствуют тому, что есть в моей базе данных, хотя, например, мой значение кэша равно 250, а значение моей базы данных - 500. Я больше не уверен, что значения базы данных или значения кэша верны, но в чем причина того, что мои кэши не синхронизированы c с моей базой данных?

1 Ответ

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

Это тривиально. Ваш кеш (для которого у нас нет кода) теряет синхронизацию c, потому что база данных обновляется без обновления вашего кеша. В общем случае - если вы не говорите о данных c и не продумали пути обновления ваших данных - это ОЧЕНЬ плохая идея для кэширования данных базы данных.

В проекте MVC, т.е. вы делаете ДЕСЯТЬ предположений о том, как ведет себя процесс, которые просто могут не соответствовать действительности - на ваш веб-сайт может отвечать несколько процессов, а не один, т. е. если IIS решает циклически обрабатывать процессы.

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