【发布时间】:2018-09-04 13:29:08
【问题描述】:
我在控制器中有一个函数,它返回一个国家列表。我正在尝试在其中实现缓存..所以只有在服务器端为空时才会获取该列表。我找到了两种方法:
-
使用 OutputCache
[OutputCache(Duration = 86400, Location = OutputCacheLocation.Server,VaryByParam ="none")] public function getelement(){ //return list of country; }
但我无法测试它可能是因为客户端和服务器都是我自己。
-
使用 MemoryCache
private static MemoryCache _cache = MemoryCache.Default; _cache.Add(cacheKey, obj, policy);//MemoryCache(String, NameValueCollection, Boolean)
我无法正确实施第二个。
有什么建议吗?
更新 1:
ObjectCache cache = MemoryCache.Default;
string cacheKey = "countrylist";
var cacheObject = cache.Get(cacheKey);
if (cacheObject == null)
{
cacheObject = getelement();//returns a list of string type
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60);
cache.Add(cacheKey, cacheObject, policy);
}
我无法使用 cacheObject 或访问现在属于对象类型的列表。
我尝试了以下解决方案:
1. var mylist = (from p in cacheObject.Cast<string>(IQueryable) select p).ToList();
2. List<string> mylist = cacheObject.AsQueryable().Cast<string>().Select(values).ToList();
values.AddRange(mylist);
但我无法创建字符串类型列表:(
【问题讨论】:
-
你想在哪一层添加一些缓存层?在控制器上?
-
是的..在控制器上
-
OutputCache的一个优点是能够进行客户端(即浏览器缓存) - 这意味着浏览器不需要从您的服务器请求资源。对你有用吗? -
我猜没有..因为我试图减少第一次页面加载时间..这不会有任何区别..最好将列表保存在服务器的缓存中
-
its better to save the list in server's cacheOutputCache可以两者(客户端和服务器缓存)。此外,它可以缓存在任何下游服务器上(例如代理 - msdn.microsoft.com/en-us/library/…)。另外,如果您稍后添加 CDN,您将再次获得改进的加载时间。老实说,如果您尝试缓存整个 http 请求,您应该强烈考虑OutputCache。这就是它的用途。
标签: c# asp.net-mvc caching