关于Kentico9缓存的咨询

时间:2017-01-17 09:28:01

标签: c# caching kentico

我正在使用Kentico 9并尝试测试缓存。我想询问如果输入新值,如何替换现有缓存。

最近尝试使用此代码进行缓存:

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

3 个答案:

答案 0 :(得分:2)

缓存数据时,需要设置正确的缓存依赖关系。例如,这是所有用户的缓存依赖性:

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

每当用户更新或创建时,这将删除缓存。因此,下次调用该方法时,它将从数据库中获取数据并再次缓存,直到缓存过期或有人添加/更新用户。

因此,您不需要注意更换/更新缓存数据 - 已经有适当的机制。

请参阅documentation中的缓存依赖项。

答案 1 :(得分:2)

由于您的缓存依赖项称为"cacheValue",因此您需要“触摸”该特定缓存键,以强制清除缓存。

当您缓存的值发生更改时(您提供给string result方法的getCachingValue参数的值),请调用CacheHelper.TouchKey方法强制缓存清除:

CacheHelper.TouchKey("cacheValue");

(您还应该考虑更改缓存键的名称,以防止混淆)

答案 2 :(得分:1)

请注意,如果您的缓存密钥是" cacheValue"然后对此发出的任何通话都将始终相同。' CacheSetting键是它的唯一标识符'你可以说,Cache Depenency就是它自动重置的方式。

例如,假设您缓存一个添加两个值的函数(不会真的需要缓存它,但是对于输入更改的示例)

如果你有" AddTwoValues(int a,int b)"的缓存值。的

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 | all作为依赖项,每当用户被更改时,此缓存会自动清除)