首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Kentico9缓存的查询

关于Kentico9缓存的查询
EN

Stack Overflow用户
提问于 2017-01-17 17:28:01
回答 3查看 244关注 0票数 1

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

最近正在尝试使用以下代码进行缓存:

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

发布于 2017-01-17 17:42:22

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

代码语言:javascript
复制
if (cs.Cached)
        {
            cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all");
        }

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

所以你不需要关心替换/更新缓存数据--合适的机制已经存在了。

请参见documentation中的缓存依存关系。

票数 2
EN

Stack Overflow用户

发布于 2017-01-17 17:48:34

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

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

代码语言:javascript
复制
CacheHelper.TouchKey("cacheValue");

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

票数 2
EN

Stack Overflow用户

发布于 2017-01-17 22:16:16

请记住,如果您的缓存键是"cacheValue“,那么对它的任何调用都将始终是相同的”hit.‘“。可以说,CacheSetting键是它的“唯一标识符”,而缓存依赖关系是它如何自动重置的。

例如,假设您缓存了一个函数,该函数添加了两个值(实际上并不需要缓存此函数,但对于输入发生更改的示例)

如果您的"AddTwoValues(int,int )“有一个缓存值,

代码语言:javascript
复制
CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, "cacheValue"));

第一个调用将缓存调用的值(假设您传递给它1和2),因此它为键"cacheValue“缓存"3”。

第二次调用如果你传递给它3,5,缓存键仍然是"cacheValue“,所以它会假设这是与第一次调用相同的调用并返回3,甚至不会尝试添加3+5。

我通常会将任何参数附加到缓存键。

代码语言:javascript
复制
CacheHelper.Cache(cs => AddTwoValuesHelper(cs, a, b), new CacheSettings(10, string.Format("AddTwoValues|{0}|{1}", a, b)));

这样,如果我用1和2调用它,两次,第一次它将处理并缓存"3“作为键"AddTwoValues|1|2",当再次调用时,键将匹配,因此它将只返回缓存值。

如果使用不同的参数进行调用,则缓存键也会有所不同。

讲得通?

当然,其他答案都是关于helper函数中的缓存依赖关系:

代码语言:javascript
复制
if (cs.Cached)
        {
            cs.CacheDependency = CacheHelper.GetCacheDependency("cms.user|all");
        }

标识它如何自动清除(如果您将cms.users|all作为依赖项,则每当用户发生更改时,此缓存都会自动清除自身)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41693375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档