Umbraco 7使用运行时缓存

时间:2016-06-06 14:05:56

标签: umbraco7

我想在运行时缓存中存储少量文本字符串

using Umbraco.Core.CacheHelper

ApplicationContext.Current.ApplicationCache.Runtime

但在搜索之后,我并不是100%清楚如何获得和设定价值 - 任何人都可以提供一个例子。

我想我可以使用get来设置值,但是如果设置了它我将如何更新它们?

我试过了

ApplicationContext.ApplicationCache.RuntimeCache.InsertCacheItem<runtimeCache>("myObject",rC);

我已经创建了一个类myObject和实例rC,但这会崩溃

编译器错误消息:CS0120:非静态字段,方法或属性'Umbraco.Core.ApplicationContext.ApplicationCache.get'

需要对象引用

任何人都可以解释我哪里出错了吗?

2 个答案:

答案 0 :(得分:0)

我相信你需要处理一个例如:

ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem("Key")

答案 1 :(得分:0)

旧帖子,但这是我设置它的方式:

您需要(2)方法。一个是端点(无论是API端点,Action等)。第二种方法是缓存实现将要调用的方法,只有当key已经不在缓存中时,和/或(如果设置)超时已经过去。

根据您要求的内容,您的缓存密钥必须是唯一的。如果您正在缓存,例如,产品信息,而不是命名您的密钥,那么不同会给您带来不良数据,因为它总是会给您&#34;产品101&#34;。

public static List<ProductCategoryModel> GetPopularProducts(IPublishedContent homePage)
{
    TimeSpan cacheLifetime = TimeSpan.MinValue;
    TimeSpan.TryParse("06:00:00", out cacheLifetime);
    var cachedItem = ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem($"GetPopularProducts", () => GetProductCategoryData(homePage.Descendants("Product").Where(x => x.GetPropertyValue<bool>("popularProduct")).OrderByDescending(x => x.UpdateDate).Take(15).ToList(), true), cacheLifetime);
    return cachedItem as List<ProductCategoryModel>;
}

在方法内的第3行var cachedItem = .....GetCacheItem的第一个参数是键名。在这种情况下,&#34; GetPopularProducts&#34;。第二个参数调用我上面解释的第二个方法,第三个参数是我们的缓存&#34;生命周期&#34;。

public static List<ProductCategoryModel> GetProductCategoryData(List<IPublishedContent> umbProductCategories, bool isProductTiles)
{ ....... // return some data }

当您拨打GetPopularProducts方法时,您不必添加&#34;添加到&#34;缓存。该方法的这种变化既增加了高速缓存&#34;并根据我们的&#34;键&#34;检索并检索(如果保存并在缓存中找到)传递到GetCacheItem