MemoryCache缓存 ---缓存时效

MemoryCache缓存 ---缓存时效测试

var cachePool = new MyCachePool();
//Thread.Sleep(1000);
var value = cachePool.GetFileValue();

/// <summary>
    /// MemoryCache缓存
    /// </summary>
    public class MyCachePool
    {
        ObjectCache cache = MemoryCache.Default;
        const string cacheKey = "TestCacheKey";
        public string GetValue()
        {
            var content = cache[cacheKey] as string;
            if (content == null)
            {
                //Console.WriteLine("Get New Item");

                var policy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddSeconds(5) };
                content = Guid.NewGuid().ToString();
                cache.Set(cacheKey, content, policy);
            }
            else
            {
                Console.WriteLine("Get cached item");
            }

            return content;
        }
        public string GetFileValue()
        {
            string strCacheKey = "FileCacheKey";
            var content = cache[strCacheKey] as string;
            if (content == null)
            {
                //Console.WriteLine("Get New Item");

                //var file = @"E:\test.txt";
                //CacheItemPolicy policy = new CacheItemPolicy();
                //policy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string> { file }));

                //content = File.ReadAllText(file);
                //cache.Set(strCacheKey, content, policy);

                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(3);

                content = Guid.NewGuid().ToString();

                CacheItem item = new CacheItem("cachedText", content);

                List<string> keys = new List<string> { strCacheKeyChange };

                policy.ChangeMonitors.Add(cache.CreateCacheEntryChangeMonitor(keys));   //依赖某个值变化

                cache.Set(item, policy);
            }
            else
            {
                Console.WriteLine("Get cached item");
            }

            return content;
        }
    }

原文地址:https://www.cnblogs.com/love201314/p/9089905.html

时间: 2024-07-31 11:03:44

MemoryCache缓存 ---缓存时效的相关文章

在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理

在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可读性,并且可以更加优雅的实现常规的日志.异常.缓存.事务等业务场景的处理.本篇主要介绍使用MemoryCache实现缓存的处理. 1.MemoryCache的介绍回顾 上篇没有提及缓存的处理,一般情况下,缓存的处理我们可以利用微软的分布式缓存组件MemoryCache进行缓存的处理操作.MemoryCache

HTTP缓存缓存机制

http协议无状态,所以缓存设定从两方面考虑.客户端浏览器和服务器端. 浏览器端实现过期机制. 服务器端实现验证机制. 缓存机制. 为了减轻服务器负担,也减少网络传输数量.http1.0定义了Expires. http1.1 进一步定义了cache-control字段. Expires: 返回一个date 类型时间戳,指定该文件被浏览器缓存到什么时间后过期.这个字段貌似在F5刷新时候仍会重新发送http请求. Cache-Control:该字段定义了很多子项,  本人只关心浏览器端返回字段,如m

EhCache 分布式缓存/缓存集群

开发环境: System:Windows JavaEE Server:tomcat5.0.2.8.tomcat6 JavaSDK: jdk6+ IDE:eclipse.MyEclipse 6.6 开发依赖库: JDK6. JavaEE5.ehcache-core-2.5.2.jar Email:[email protected] Blog:http://blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ http://hoojo.blogjava.

EhCache RMI 分布式缓存/缓存集群

EhCache 系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点. EhCache 的主要特性有: 快速.精干 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘,因此无需担心容量问题: 缓存数据会在虚拟机重启的过程中写入磁盘: 可以通过 RMI.可插入 API 等方式进行分布式缓存: 具有缓存和缓存管理器的侦听接口: 支持多缓存管理器实例,以及一个实例的多个缓存区域: 提供 Hibernate 的缓存实现: EhCache集群解决的问题:  由 于 EhCa

应用服务器性能优化之分布式缓存-缓存基础

应用服务器就是处理网站应用的服务器,网站的业务代码都部署在这里,是网站开发最复杂,变化最多同时也是最重要.最基础的地方.可以说没有应用服务器就没有网站. 在我们介绍分布式缓存之前,因为考虑到很多览客和当初的我一样,对于什么是应用服务器,分布式缓存是什么样的概念都不清楚,所以我们就一步一步来,从基本的概念说起. 1.缓存基本原理 所谓的缓存是指将数据存储在相对访问速度较高的介质中,以供系统处理.一方面缓存访问速度快,可以减少数据的访问时间,另一方面如果缓存的数据是经过计算得到的,那么缓存的数据就无

redis中的缓存-缓存雪崩和缓存穿透

缓存雪崩 缓存雪崩是由于原有缓存失效(过期),新缓存未到期间.所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机.从而形成一系列连锁反应,造成整个系统崩溃. 1. 碰到这种情况,一般并发量不是特别多的时候,使用最多的解决方案是加锁排队. public object GetProductListNew() { const int cacheTime = 30; const string cacheKey = "product_list"; const st

缓存---缓存位置

3.缓存位置 浏览器 ??当HTTP响应允许进行缓存时,浏览器会将HTML,CSS,JAVAScript,图片等静态资源进行缓存. ISP ??网络服务提供商(ISP)是网络访问的第一跳,通过将数据缓存在ISP中能够大大提高用户的访问速度. 反向代理 ??反向代理位于服务器之前,请求与响应都要经过反向代理.通过将数据缓存在反向代理,在用户请求反向代理时就可以直接使用缓存进行响应. 本地缓存 ??使用Guava Cache将数据缓存在服务器本地内存中,服务器代码可以直接读取本地内存中的缓存,速度非

缓存---缓存问题

5.缓存问题 缓存穿透 ??指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存到达数据库. 解决方案: 对这些不存在的数据缓存一个空数据. 对这类请求进行过滤 缓存雪崩 ??指的是由于数据没有加载到缓存中,或者缓存数据在同一时间出现大面积的失效(过期),又或者是缓存服务器崩溃,导致大量的请求都到达数据库. ??在有缓存的系统中,系统非常的依赖缓存,缓存分担了很大一部分的数据请求,当发生缓存雪崩时,数据库因为无法处理这么多的请求,导致数据库崩溃. 解决方案: 为了防止缓存在同一时间内大量的过

[爬虫学习笔记]MemoryCache缓存的用法学习

      在完成了DNS解析模块之后,我意识到了DNS缓存机制也很有必要.在Redis,Memcache,和.Net自带的Cache之间,考虑到部署问题,最终选择了后者,之前在学习Web及开发的过程中用过System.Web.Caching.Cache这个类库,但是这次的爬虫程序我打算部署为桌面软件,所以选用了System.Runtime.Caching.MemoryCache(后期如有必要也会加入System.Web.Caching.Cache来适配Web端程序).       Memory