缓存:本地缓存和分布式缓存及缓存过期时间设置

1、首先对于本地内存缓存,就是把数据缓存在本机的内存中,如下图1所示:

2、 分布式缓存机制:可能存在跨进程,跨域访问缓存数据

对于分布式的缓存,此时因为缓存的数据是放在缓存服务器中的,或者说,此时应用程序需要跨进程的去访问分布式缓存服务器,如图2:

当我们在应用中使用跨进程的缓存机制,例如分布式缓存memcached或者微软的AppFabric,此时数据被缓存在应用程序之外的进程中。每次,当我们要把一些数据缓存起来的时候,缓存的API就会把数据首先序列化为字节的形式,然后把这些字节发送给缓存服务器去保存。同理,当我们在应用中要再次使用缓存的数据的时候,缓存服务器就会将缓存的字节发送给应用程序,而缓存的客户端类库接受到这些字节之后就要进行反序列化的操作了,将之转换为我们需要的数据对象。

 

另外还有需要注意的就是: 

这个序列化与反序列化的机制都是发生在应用程序服务器上的,而缓存服务器只是负责保存而已。

.NET中的默认使用的序列化机制不是最优的,因为它要使用反射机制,而反射机制是是非常耗CPU的,特别是当我们缓存了比较复杂的数据对象的时候。

一般而言,缓存机制都是会设置绝对过期时间与相对过期时间

3.时间设定

3.1. 设定绝对过期时间

复制代码
/// <summary>
        /// 设定绝对的过期时间
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="seconds">超过多少秒后过期</param>
        public static void SetCacheDateTime(string CacheKey, object objObject, long Seconds) 
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject, null, System.DateTime.Now.AddSeconds(Seconds), TimeSpan.Zero);
        }
复制代码

 

3.2.设定相对过期时间

复制代码
/// <summary>
        /// 设置当前应用程序指定包含相对过期时间Cache值
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        /// <param name="timeSpan">超过多少时间不调用就失效,单位是秒</param>
        public static void SetCacheTimeSpan(string CacheKey, object objObject,long timeSpan) 
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, TimeSpan.FromSeconds(timeSpan));
        }
复制代码

 

链接:http://www.infoq.com/cn/articles/misunderstanding-using-cache/

     http://www.cnblogs.com/wuyifu/p/3956476.html

posted @ 2016-04-16 16:22  lucyun  阅读(5384)  评论(0编辑  收藏  举报