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

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

时间: 2024-07-30 18:22:03

缓存:本地缓存和分布式缓存及缓存过期时间设置的相关文章

如果将缓存“滑动过期时间”设置为1秒会怎样?

今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个段程序很简单:我们通过HttpRuntime的静态属性Cache得到表示当前缓存的Cache对象,并调用其Insert方法对当前的时间实施缓存.需要注意的是,我们采用“滑动时间”过期策略,并将这个滑动时间设置为1秒.

处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题

项目中需要使用app本地css.js,并且可以根据服务下发自动更新本地css.js.测试发现只要更新后的css或者js和更新前路径一致,webview加载的还是更新前的css.js.怀疑是webview本身缓存了css.js. 使用很多原生方法比如: [[NSURLCache sharedURLCache] removeAllCachedResponses];[[NSURLCache sharedURLCache] setDiskCapacity:0];[[NSURLCache sharedUR

高性能的分布式内存对象缓存系统Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 外文名 memcached 所    属 缓存系统 编写语言 不限 通信手段 memcached协议 目录 1功能 2特征 ? 协议 ? 事件处

中央缓存结合本地缓存-本地缓存数据刷新方案

互联网应用通常都需要应付大并发量,为了提高QPS,通常会使用中央缓存(例如memcache)和本地缓存的方式.请求先经过本地缓存,如果不命 中,则 请求穿透到中央缓存,如果还是不命中,则会直接查询数据库,并把查询到的数据刷新到中央缓存中.如果采用这种方式的话,必须要解决一个问题,如何刷新本地 缓存的数据. 详细请看我的csdn博客: 中央缓存结合本地缓存-本地缓存数据刷新方案

Twemproxy 分布式集群缓存代理服务器

Twemproxy 分布式集群缓存代理服务器 是一个使用C语言编写.以代理的方式实现的.轻量级的Redis代理服务器, 它通过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理, 使 应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有 多少个真实的Redis或Memcached实例,从而实现了基于Redis和 Memcached的集群服务.当某个节点宕掉时,Twemproxy可以自 动将它从集群中剔除,而当它恢复服务时,Twemproxy也会自动连接. 由 于是代理,

Memcached分布式内存对象缓存系统

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 一个用PHP编写的可视化的MemCached管理系统. MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,

分布式系列之缓存设计中常见的问题

    缓存这个东西相信大家工作中都接触得比较多,相应的在不同场景下也会遇到各种各样的问题.下面我列举几种可能会遇到的问题并提供一些解决建议. 1.如何把海量数据存放在缓存中并提供快速查询      现实中我们的缓存通常都是以string,map,array,list,set,tree等具体的类型或者集合存放内存中,它们的共同点都在于把元素具体内容放到内存里面.这种在元素数量小的时候是没问题.但一旦数据量过大,消耗的内存也会呈现线性增长,最终达到瓶颈,并且查询效率也可能随着元素数量增长而下降.比

本地缓存过期时间与JVM垃圾回收

背景:在mo的业务中,调整更长的本地缓存的有效时间,可以一定程度减少主动回源的次数,并减少YGC的频率,但是也可能会有一些新问题. 首先要知道: 1.JVM中的堆内存是一个可以被一个进程内的所有线程共享的,而本地缓存一般就放在这块堆内存上. 2.堆内存一般分为新生代.老生代和永久代,永久带是方法区,不在本次讨论范围内. 3.YGC发生在新生代(创建新对象,空间不够时触发),FGC发生在老生代(老生代满了才触发). 4.无论YGC还是FGC,都只清除JVM认为是垃圾的对象. 5.新生代又分为ede

缓存服务新思路,创建动态查询的缓存

先看看常用缓存的形式 本地缓存 缓存在当前应用程序内存中,通常以静态变量存储,它可以是任何对象,一个值,一个集合都行 因为是在当前程序中,能很好得到控制,创建,访问都很好办,特别是集合,通过集合查询语法或自已写的算法很好过滤,取出想要的结果 然而这些数据需要多程序共用,那么需要把它集中放在一个地方,供多应用程序调用 分布式缓存 分布式缓存就是为了解决二级缓存不能解决的问题,把数据放在独立的服务器上,提供访问接口,供不同客户端程序调用 一般分为两部份,服务端,客户端接口,通过统一的客户端接口,从服