我正在使用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;
}发布于 2017-01-17 17:42:22
在缓存数据时,您需要设置正确的缓存依赖关系。例如,这是所有用户的缓存依赖关系:
if (cs.Cached)
{
cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all");
}每当更新或创建用户时,这将删除缓存。因此,下次调用该方法时,它将从数据库中获取数据并再次缓存,直到缓存过期或有人添加/更新用户。
所以你不需要关心替换/更新缓存数据--合适的机制已经存在了。
请参见documentation中的缓存依存关系。
发布于 2017-01-17 17:48:34
由于您的缓存依赖项称为"cacheValue",因此您需要“触摸”该特定缓存键,以强制清除缓存。
当要缓存的值发生更改(提供给getCachingValue方法的string result参数的值)时,调用CacheHelper.TouchKey方法以强制清除缓存:
CacheHelper.TouchKey("cacheValue");(您还应考虑更改缓存键的名称,以防止混淆)
发布于 2017-01-17 22:16:16
请记住,如果您的缓存键是"cacheValue“,那么对它的任何调用都将始终是相同的”hit.‘“。可以说,CacheSetting键是它的“唯一标识符”,而缓存依赖关系是它如何自动重置的。
例如,假设您缓存了一个函数,该函数添加了两个值(实际上并不需要缓存此函数,但对于输入发生更改的示例)
如果您的"AddTwoValues(int,int )“有一个缓存值,
CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, "cacheValue"));第一个调用将缓存调用的值(假设您传递给它1和2),因此它为键"cacheValue“缓存"3”。
第二次调用如果你传递给它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",当再次调用时,键将匹配,因此它将只返回缓存值。
如果使用不同的参数进行调用,则缓存键也会有所不同。
讲得通?
当然,其他答案都是关于helper函数中的缓存依赖关系:
if (cs.Cached)
{
cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all");
}标识它如何自动清除(如果您将cms.users|all作为依赖项,则每当用户发生更改时,此缓存都会自动清除自身)
https://stackoverflow.com/questions/41693375
复制相似问题