我想在运行时缓存中存储少量文本字符串
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"需要对象引用
有人能解释一下我哪里错了吗?
我认为您需要处理一个实例,例如:
ApplicationContext.Current.ApplicationCache.RuntimeCache.GetCacheItem("Key")
旧帖子,但我是这样设置的:
你需要(2)种方法。一个是端点(无论是API端点、Action等)。第二种方法是缓存实现要调用的方法,仅当key
不在缓存中时,和/或(如果设置)超时已过。
根据您的请求,您的缓存密钥必须是唯一的。例如,如果你正在缓存产品信息,不给密钥命名不同的密钥会给你带来坏数据,因为它总是会给你"产品101"。
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
的第一个参数是密钥名称。在本例中,为"GetPopularProducts"。第二个参数调用我上面解释的第二个方法,第三个参数是我们的缓存"生存期"。
public static List<ProductCategoryModel> GetProductCategoryData(List<IPublishedContent> umbProductCategories, bool isProductTiles)
{ ....... // return some data }
当您调用GetPopularProducts
方法时,您不必"添加"到缓存中。该方法的这种变体既将"添加到缓存",又根据传递到GetCacheItem
中的"密钥"(如果保存并在缓存中找到)进行检索。