当前位置: 首页 > ds >正文

Microsoft Enterprise Library: Cache 模块

    Microsoft Enterprise Library中的Cache模块能在多种场景中提供缓存功能:Web程序,桌面程序,WPF程序。我们可以配置Cache模块的缓存处理器,目前系统自带3个缓存处理器:In-Memory,Isolated Storage Cache Store 和 Data Cache Storage。 并且我们还能实现自己的缓存处理器,只需要实现接口 IBackingStore,我们又可以发明自己的轮子啦:)

In-Memory:保存在内存中。  

Isolated Storage Cache Store:系统将缓存的信息保存在独立文件中(C:\Users\<<user name>>\AppData\Local\IsolatedStorage)。

Data Cache Storage:将缓存数据保存在数据库中。

Custom Cache Storage:自己扩展的处理器。我们可以将数据保存在注册表中或文本文件中。

 

In-Memory

            ICacheManager cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("B", "This is letter B.");
cacheManager.Add("C", "This is letter C.");
cacheManager.Add("D", "This is letter D.");
cacheManager.Add("E", "This is letter E.");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Remove("B");
cacheManager.Remove("C");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Flush();


 

配置信息

 

 

Isolated Storage Cache Store

            simeple demo
ICacheManager cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
cacheManager.Add("A", "This is letter A");
cacheManager.Add("B", "This is letter B");
Console.WriteLine(string.Format("{0}:{1}", "A", cacheManager.GetData("A")));
cacheManager.Remove("A");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Flush();
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));


 

配置信息

 

Data Cache Storage

ICacheManager cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("B", "This is letter B.");
cacheManager.Add("C", "This is letter C.");
cacheManager.Add("D", "This is letter D.");
cacheManager.Add("E", "This is letter E.");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Remove("B");
cacheManager.Remove("C");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Flush();


 

配置信息

 

 

Custom Cache Storage

ICacheManager cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("A", "This is letter A.");
cacheManager.Add("B", "This is letter B.");
cacheManager.Add("C", "This is letter C.");
cacheManager.Add("D", "This is letter D.");
cacheManager.Add("E", "This is letter E.");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Remove("B");
cacheManager.Remove("C");
Console.WriteLine(string.Format("currently there are {0} elements in cache pool.", cacheManager.Count));
cacheManager.Flush();


Custom Cache Storage实现代码

namespace SimpleCacheDemo
{
using System;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.IO;
using Microsoft.Win32;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Collections;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.ServiceLocation;
using Microsoft.Practices.Unity.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
using Microsoft.Practices.EnterpriseLibrary.Caching.Configuration;
/// <summary>
/// TODO: Update summary.
/// </summary>
/// 
[ConfigurationElementType(typeof(CustomCacheStorageData))]
public class CustomStorage:IBackingStore
{
public CustomStorage(NameValueCollection keys)
{ }
public void Add(CacheItem newCacheItem)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("software", true);
RegistryKey microsoft = software.OpenSubKey("microsoft", true);
RegistryKey entryDir = microsoft.CreateSubKey("customcache", RegistryKeyPermissionCheck.ReadWriteSubTree);
if (entryDir != null)
{
if (entryDir.GetValue(newCacheItem.Key) == null)
{
entryDir.SetValue(newCacheItem.Key, newCacheItem.Value.ToString(), RegistryValueKind.String);
}
entryDir.Close();
}
microsoft.Close();
software.Close();
}
public int Count
{
get {
int keyCount = 0;
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("software", true);
RegistryKey microsoft = software.OpenSubKey("microsoft", true);
using (RegistryKey entryDir = microsoft.CreateSubKey("customcache", RegistryKeyPermissionCheck.ReadWriteSubTree))
{
if (entryDir != null)
{
keyCount = entryDir.GetValueNames().Length;
}
}
return keyCount;
}
}
public void Flush()
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("software", true);
RegistryKey microsoft = software.OpenSubKey("microsoft", true);
microsoft.DeleteSubKeyTree("customcache");
}
public System.Collections.Hashtable Load()
{
Hashtable cacheItemTbl = new Hashtable();
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("software", true);
RegistryKey microsoft = software.OpenSubKey("microsoft", true);
using (RegistryKey entryDir = microsoft.CreateSubKey("customcache", RegistryKeyPermissionCheck.ReadWriteSubTree))
{
if (entryDir != null)
{
foreach (string key in entryDir.GetValueNames())
{
cacheItemTbl.Add(key, entryDir.GetValue("key"));
}
}
}
return cacheItemTbl;
}
public void Remove(string key)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("software", true);
RegistryKey microsoft = software.OpenSubKey("microsoft", true);
using (RegistryKey entryDir = microsoft.CreateSubKey("customcache", RegistryKeyPermissionCheck.ReadWriteSubTree))
{
if (entryDir != null)
{
entryDir.DeleteValue(key);
}
}
}
public void UpdateLastAccessedTime(string key, DateTime timestamp)
{
}
public void Dispose()
{
}
}
}

配置信息

 

缓存禁用

cache expire regulation
string moniterFilePath = AppDomain.CurrentDomain.BaseDirectory + "tmp.txt";
ICacheManager cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>();
if (File.Exists(moniterFilePath) == false)
{
using (File.Create(moniterFilePath))
{ }
}
// these class was implemented interface ICacheItemExpiration
NeverExpired neverExpired = new NeverExpired();
AbsoluteTime absoluteTime = new AbsoluteTime(new TimeSpan(0, 0, 10));//ten seconds
SlidingTime slidingTime = new SlidingTime(new TimeSpan(0, 0, 10));
FileDependency fileDependency = new FileDependency(moniterFilePath);
//没实现,构造函数中的参数比较奇怪
ExtendedFormatTime extendedFormatTIme = new ExtendedFormatTime("Hour - 0-23");
//cache refresh listener
CacheRefreshContainer cacheRefreshContainer = new CacheRefreshContainer(cacheManager, slidingTime);
CacheRefresher cacheRefresher = new CacheRefresher(cacheRefreshContainer);//new CacheRefresher();//new CacheRefresher(cacheManager);
//seems we can't add a new item in cache pool during CacheRefresher was executing.
cacheManager.Add("A", "This is letter A!", CacheItemPriority.High, cacheRefresher, slidingTime);
Console.WriteLine(string.Format("{0}:{1}", "A", cacheManager.GetData("A")));
System.Threading.Thread.Sleep(15000);
Console.WriteLine(string.Format("{0}:{1}", "AB", cacheManager.GetData("AB")));
//test encryptograme function
cacheManager.Add("A", "This is letter A.");
Console.WriteLine(string.Format("{0}:{1}", "A", cacheManager.GetData("A")));
Console.ReadKey();
cacheManager.Flush();


CacehRefresher

    [Serializable]
public class CacheRefresher:ICacheItemRefreshAction
{
//ICacheManager _cacheManager;
//public CacheRefresher(ICacheManager cacheManager)
//{
//    _cacheManager = cacheManager;
//}
CacheRefreshContainer _cacheRefreshContainer;
public CacheRefresher(CacheRefreshContainer cacheRefreshContainer)
{
_cacheRefreshContainer = cacheRefreshContainer;
}
public void Refresh(string removedKey, object expiredValue, CacheItemRemovedReason removalReason)
{
//_cacheManager.Remove(removedKey);
//_cacheManager.Add(removedKey + "B", expiredValue.ToString() + " new!");
}
}

 

   
 

http://www.xdnf.cn/news/11158.html

相关文章:

  • 三网合一建设方案
  • Discuz后台使用之风格管理
  • Python训练营打卡Day43
  • [Win32]画刷、矩形、不规则区域和剪裁
  • SD卡被写保护怎么解除?
  • 全网最详细的网络安全(白帽黑客)入门教程,282g资源无偿分享
  • mysql bulk update_91.一次性处理多条数据的方法:bulk_create,update,delete
  • 如何更改pcAnywhere的默认端口(zz)
  • linux c可变参数va_start、va_end、va_arg、va_list
  • 使用计算机的便利,allshare play:只要几个步骤立即使用这个非常便利的功能!...
  • adobe dreamweaver cs5序列号
  • Ubuntu 9.04安装教程(傻瓜版)
  • struts2通配符使用
  • 如何在VirtualBox虚拟机中安装XP系统? 转
  • Android签名机制及PMS中校验流程(雷惊风)
  • Cadence Allegro PCB设计88问解析(七) 之 Allegro位号反标OrCAD
  • Java版文本编辑器
  • socks5 运行几个小时后 端口10808不通了,ss5服务正常
  • Spring整合Quartz框架实现定时任务跑批(Maven完整版)
  • 超级详细的GitLab安装 与使用 【Gitlab添加组、创建用户和项目、权限管理】_gitlab群组
  • 探秘GPT:开启人工智能语言模型的新纪元
  • Yandex 邮箱添加
  • 麒麟短线王至尊版 软件及指标 应用!
  • Linux系统下安装部署Linux管理面板1panel
  • Win11系统提示找不到olecli32.dll文件的解决办法
  • web.xml中context-param的配置作用
  • dll和so文件区别与构成
  • 世界环保创业基金会简介
  • LDAP 目录服务器的现代化应用
  • 动态实现RelativeLayout,LinearLayout布局