asp.net三层架构中缓存层如何搭建,求大神指教~!
新手一枚,才学的缓存,想问下各位大神,三层架构中加一层缓存层,该如何搭建?求大神指点下 ASP.NET Cache --------------------编程问答-------------------- 缓存层 是工具层我有在BLL中用缓存,也有在UI层中用缓存 --------------------编程问答-------------------- 由前台缓存和后台缓存
前台页面缓存的话 和三层无关,你在相应的输出页面 指定If-Modified-Since头和输出304类型即可
如果是后台缓存的话 建议在DAL层取数据的时候操作,就是在BLL像DAL取数据时如果DAL发现有缓存 就直接返回缓存,如果没有再从新从数据库取数据,这样就不会影响BLL业务层的变更 --------------------编程问答--------------------
/// <summary>--------------------编程问答--------------------
/// 建立缓存
/// </summary>
public static object TryAddCache(string key, object value, CacheItemPriority priority)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, priority, null);
else
return null;
}
/// <summary>
/// 建立定时不访问便移除的缓存
/// </summary>
public static object TryAddCache(string key, object value, TimeSpan slidingExpiration, CacheItemPriority priority)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, Cache.NoAbsoluteExpiration, slidingExpiration, priority, null);
else
return null;
}
/// <summary>
/// 建立缓存,并在移除时执行事件
/// </summary>
public static object TryAddCache(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemovedCallback)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, absoluteExpiration, slidingExpiration, priority, onRemovedCallback);
else
return null;
}
/// <summary>
/// 移除缓存
/// </summary>
public static object TryRemoveCache(string key)
{
if (HttpRuntime.Cache[key] != null)
return HttpRuntime.Cache.Remove(key);
else
return null;
}
/// <summary>
/// 移除键中带某关键字的缓存
/// </summary>
public static void RemoveMultiCache(string keyInclude)
{
IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
if (CacheEnum.Key.ToString().IndexOf(keyInclude.ToString()) >= 0)
HttpRuntime.Cache.Remove(CacheEnum.Key.ToString());
}
}
/// <summary>
/// 移除所有缓存
/// </summary>
public static void RemoveAllCache()
{
IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
HttpRuntime.Cache.Remove(CacheEnum.Key.ToString());
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Web;
using System.Web.Caching;
namespace BLL
{
public class Caches
{
/// <summary>
/// 建立缓存
/// </summary>
public static object TryAddCache(string key, object value, CacheItemPriority priority)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, priority, null);
else
return null;
}
/// <summary>
/// 建立定时不访问便移除的缓存
/// </summary>
public static object TryAddCache(string key, object value, TimeSpan slidingExpiration, CacheItemPriority priority)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, Cache.NoAbsoluteExpiration, slidingExpiration, priority, null);
else
return null;
}
/// <summary>
/// 建立缓存,并在移除时执行事件
/// </summary>
public static object TryAddCache(string key, object value, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemovedCallback)
{
if (HttpRuntime.Cache[key] == null && value != null)
return HttpRuntime.Cache.Add(key, value, null, absoluteExpiration, slidingExpiration, priority, onRemovedCallback);
else
return null;
}
/// <summary>
/// 移除缓存
/// </summary>
public static object TryRemoveCache(string key)
{
if (HttpRuntime.Cache[key] != null)
return HttpRuntime.Cache.Remove(key);
else
return null;
}
/// <summary>
/// 移除键中带某关键字的缓存
/// </summary>
public static void RemoveMultiCache(string keyInclude)
{
IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
if (CacheEnum.Key.ToString().IndexOf(keyInclude.ToString()) >= 0)
HttpRuntime.Cache.Remove(CacheEnum.Key.ToString());
}
}
/// <summary>
/// 移除所有缓存
/// </summary>
public static void RemoveAllCache()
{
IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
HttpRuntime.Cache.Remove(CacheEnum.Key.ToString());
}
}
}
}
Cache类代码! --------------------编程问答--------------------
那如果我只是想缓存 一个页面上的某部分html代码呢~ --------------------编程问答--------------------
看你的网站使用何种编写方式了
比如:
1:用ajax,该html片段自成立一个页面,再前台加载该页面显示即可实现片段缓存(用iframe也可以),这种方式对SEO不是很友好
2:可以放入静态变量中,这样方便,但是过期时间不好控制
3:可以使用缓存数据库,比如memcached,redis等,需要第三方软件的配合
4:如果4L的代码可行的话 不也可以缓存html片段吗,不过没使用过。。。
纯属个人想法哈
补充:.NET技术 , ASP.NET