EnterpriseLibrary 程序缓存
2010-02-22 18:57 听风吹雨 阅读(1398) 评论(0) 编辑 收藏 举报EL的缓存原理:(个人理解)
我们在一般的情况是直接去数据库或者数据文件中找到数据来进行操作,但如果我们像减少这些在一定时间内比较固定的数据,而不想做无谓的查询操作来减少IO的操作,提高性能,比如一些OA系统中的系统配置等,这些东西一般都是不怎么变化的,而每个用户进来都要去数据库读取一次,那就给数据库造成无谓的压力了。所以我们要做缓存。
如果我们要加入缓存,那和我们平常的数据库查询又有什么不同呢? 其实这个和Session很类似。在没有缓存的情况下,我们是直接调用方法去查询,那如果要加入缓存,那就是我们首先要去缓存中判断是否有我们需要的数据,这个区分数据的方法就是给这些数据加入一个key值,这样就可以根据key值来判断数据是否为空了,如果没有数据,那我们这个时候才去带哦用我们平常的查询方法,并且把查询出来的数据放入到缓存中。这里的缓冲会根据web.config中配置的时间来删除数据,这样就起到定时刷新缓存的作用。
一个EnterpriseLibrary Caching例子
第一,添加引用:Microsoft.Practices.EnterpriseLibrary.Caching.dll
第二,在代码中加入:using Microsoft.Practices.EnterpriseLibrary.Caching;
第三,在web.config中定义,其中GIS Setting Cache Manager就是一个例子;
<backingStores>
<add name="inMemory" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching"/>
</backingStores>
<cacheManagers>
<add name="Default Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
<add name="Long Time Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
<add name="Login User Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
<add name="GIS Setting Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
<add name="Setting Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
<add name="Version Cache Manager" expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="inMemory"/>
</cacheManagers>
</cachingConfiguration>
第四,在cs文件中定义
private const string CacheKey = "GisSetting";
private static CacheManager cache = CacheFactory.GetCacheManager(CacheManagerGisSetting);
第五,定义方法,这个方法是提供给其他地方调用,如果在缓存中能找到你需要的数据,那就返回,如果没有就去数据库查询。
/// 获取预警配置缓存.
/// </summary>
/// <returns></returns>
private static DataTable GetWarnSettingCache()
{
DataTable dtSetting = null;
if (cache.Contains(CacheKey))//使用key值去缓存中查询.
dtSetting = cache.GetData(CacheKey) as DataTable;
if (dtSetting != null)//如果不为空,那就返回缓存中的数据.
return dtSetting;
if (nodeShowWarnSettingService != null)//如果这个实例化的类不为null.
{
dtSetting = nodeShowWarnSettingService.GetAllList();//查询方法,去数据库中查询.
cache.Add(CacheKey, dtSetting);//加入到缓存当中.
return dtSetting;
}
return null;
}
其它地方调用这个方法就可以了。
资料
作者:听风吹雨
出处:
http://www.cnblogs.com/gaizai/
邮箱:gaizai@126.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,必须保留原文链接
格言:不喜欢是因为不会 && 因为会所以喜欢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?