2017-01-17 3 views
1

Я использую Kentico 9 и пытаюсь проверить кеширование. Я хотел бы спросить, как заменить существующий кеш при вводе нового значения.Запрос о кешировании Kentico9

Недавно пытался кэшировать с этим кодом:

CacheHelper.Cache(cs => getCachingValue(cs, cacheValue), new CacheSettings(10, "cacheValue")); 

public string getCachingValue(CacheSettings cs, string result) { 
    string cacheValue= result;  

    if (cs.Cached) 
    { 
     cs.CacheDependency = CacheHelper.GetCacheDependency("cacheValue"); 
    } 

    return cacheValue; 
} 

ответ

2

Когда кэширование данных, необходимыми для установки правильных зависимостей кэша. Например, это зависит от кеша для всех пользователей:

if (cs.Cached) 
     { 
      cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all"); 
     } 

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

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

См. Зависимости от кеша в documentation.

+0

Также в вашем примере вы передаете значение, которое вы хотите кэшировать, в метод getCachingValue. Данные, которые вы хотите сохранить в кеш, должны извлекаться из базы данных внутри этого метода. –

2

Поскольку ваша зависимость от кеша называется "cacheValue", вам необходимо «прикоснуться» к этому конкретному ключу кеша, чтобы заставить кеш очиститься.

Когда значение вы кэшировать изменения (значение, которое вы предоставляете параметром метода getCachingValuestring result), вызовите метод CacheHelper.TouchKey, чтобы заставить кэш очистить:

CacheHelper.TouchKey("cacheValue"); 

(Вы должны также рассмотреть изменение имени ключа кеша, чтобы предотвратить путаницу)

1

Помните, что если ваш кеш-ключ является «cacheValue», то любой вызов, который делается для этого, всегда будет одним и тем же «ударом». Ключ CacheSetting - это «уникальный идентификатор», который вы могли бы сказать, а Cache Depenency - это то, как он автоматически сбрасывается.

Так, например, сказать, что вы кэшировать функцию, которая добавляет два значения (не действительно нужно кэшировать, но для примера, в котором входные изменения)

Если у вас есть значение кэша для ваших «AddTwoValues (Int а, внутр б)»из

CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, "cacheValue")); 

Первый вызов будет кэшировать значение вызова (скажем, вы передаете его 1 и 2), так что он кэширует„3“для ключа„cacheValue“

Второй вызов, если вы передадите его 3, 5, ключ кеша по-прежнему «cacheValue», поэтому он предположит, что это тот же вызов, что и первый, и возврат 3, и даже не пытайтесь добавить 3 + 5.

Обычно я добавляю любые параметры в кэш-ключ.

CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, string.Format("AddTwoValues|{0}|{1}", a, b))); 

Таким образом, если я называю его с 1 и 2, в два раза, первый он обрабатывает и кэш «3» для ключа «AddTwoValues ​​| 1 | 2», и когда вызывается снова ключ будет соответствовать так он просто вернет кешированное значение.

Если вы вызываете разные параметры, ключ кеша будет отличаться.

Имеют смысл?

Другие ответы конечно говорить о зависимости кэша в функции помощника:

if (cs.Cached) 
     { 
      cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all"); 
     } 

которые определяют, как он автоматически удаляет (если вы cms.users | все как зависимость, когда пользователь изменил , этот кеш автоматически очищается)