微软企业库4.1学习笔记(十五)缓存模块3 使用数据库作为后端存储
配置缓存模块使用数据库作为后端存储
1) 在CacheManager节点上点击右键,选择新建【Database Cache Storage】
2)在配置中自动加入数据访问模块的配置信息
3)点击Data Cache Storage节点,右侧的DatabaseInstance属性显示的是数据库连接字符串的名称,它和数据访问配置中的一个配置关联的,
你可以通过输入或者下来来选择一个数据访问配置。可以重新命名Name属性。
4)设置PartitionName属性,这个标识在CacheManager中将会使用。
通过在CacheManager上的右键菜单,可以选择新建其他类型的后端存储。
注意点:缓存配置的属性值应该考虑缓存使用的模式,和系统的环境,例如,内存的容量。如果大量使用缓存,是很消耗内存的,会导致内存紧张。
可以通过模块计数器来帮助调整缓存的配置参数值。
缓存配置的xml结构
下面介绍缓存配置的xml文件结构,你可以手动修改xml文件,但是企业库的配置工具可以大大减少这些配置工作。
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<dataConfiguration defaultDatabase="Connection String" />
<connectionStrings>
<add name="Connection String" connectionString="Database=Database;Server=(local)\SQLEXPRESS;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
</connectionStrings>
<cachingConfiguration defaultCacheManager="MyCacheManager1">
<cacheManagers>
<add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Cache Manager" />
<add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
numberToRemoveWhenScavenging="10" backingStoreName="Data Cache Storage"
type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="MyCacheManager1" />
</cacheManagers>
<backingStores>
<add databaseInstanceName="Connection String" partitionName="CacheManager1"
encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.Database.DataBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching.Database, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Data Cache Storage" />
<add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Null Storage" />
</backingStores>
</cachingConfiguration>
</configuration>
在应用中使用缓存模块
准备环境:
1、 添加对Microsoft.Practices.EnterpriseLibrary.Caching.dll程序集的引用
2、 添加对Microsoft.Practices.EnterpriseLibrary.Common.dll程序集的引用,里面包含了企业库的核心内容,一些通用的功能
3、 添加对Microsoft.Practices.ObjectBuilder2.dll程序集的引用
4、 如果使用数据库作为后端存储,需要添加对Microsoft.Practices.EnterpriseLibrary.Data.dll和
Microsoft.Practices.EnterpriseLibrary.Caching.Database.dll程序集的引用
5、 如果需要加密缓存中的数据,需要添加对Microsoft.Practices.EnterpriseLibrary.Caching.Cryptography.dll和Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll程序集的引用
6、 然后再代码中导入下面的命名空间
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
using Microsoft.Practices.EnterpriseLibrary.Caching;
通常,用两步就可以开始用缓存功能了。
1) 创建CacheManager
2) 使用CacheManager中对应的方法
/*
* Created by SharpDevelop.
* User: haier
* Date: 2010-4-21
* Time: 22:33
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
using Microsoft.Practices.EnterpriseLibrary.Caching;
namespace BeautyCode.ConApp
{
public class Goods
{
public string ID{get;set;}
public string Name{get;set;}
public int Price{get;set;}
}
public class CachingTest
{
public static void Test()
{
ICacheManager goodsCache=CacheFactory.GetCacheManager();
string id="001";
string name="seed";
int price=100;
Goods goods=new Goods();
goods.ID =id;
goods .Name=name;
goods .Price=price ;
goodsCache .Add(goods .ID,goods ,CacheItemPriority .Normal ,
null,new SlidingTime (TimeSpan.FromMinutes (5)));
//Retrieve the item
goods =(Goods )goodsCache .GetData (id );
}
}
}
上面的代码演示了,用工厂方法创建CacheManager,然后调用Add方法添加数据到缓存,使用GetData方法从缓存中获取数据,
获取之后别忘了进行类型转换。
选择后端存储
每个CacheManager都可以配置为只在内存中存储数据,意味着它不使用任何后端存储,也可以配置为及使用内存,也使用持久化的存储。
持久化的形式在配置后端存储的时候指定。后端存储保证了,如果应用必须要重启的话,缓存的数据还可以存活,也就是重启之后缓存的数据不会丢失。
默认情况下,企业库的缓存模块支持两种形式的后端存储。
1) 独立的后端存储
2) 数据库的后端存储
如果你需要在多个服务器的情况下使用缓存,例如服务器场环境,后面我们会讲到。
开发者可以扩展缓存模块,来支持额外形式的后端存储。
一个应用可以使用多个缓存,每个缓存通过一个配置的CacheManager作为代理。企业库的缓存模块不支持多个CacheManager使用同一个后端存储。
但是一个应用的多个CacheManager可以使用相同的partition name。
1、使用空后端存储
空后端存储是默认的选项,它不持久化缓存的数据。意味着数据只存在于内存中,这种形式适用于你想在重启应用之后更新缓存中的数据。
它被所有的应用支持。
2、使用独立存储作为后端存储
适用于下面的情况
1) 需要持久化存储,但是用户量较少
2) 使用数据库会超出经费预算
3) 没有数据库设施
3、使用数据库作为后端存储
使用数据访问模块,可以将缓存的数据放在数据库中。默认情况,缓存模块包含一个创建缓存需要的数据表结构的脚本,支持SQL Server数据库。
开发者可以使用其它的数据库作为后端存储,但是需要修改模块的源代码。每一个数据库类型,必须在数据访问模块中包含一个数据库provider,和一个兼容的表结构。
未完待续。。。。。。。。。。。。。。。。。。。。。
微软企业库4.1学习笔记(十五)缓存模块3 使用数据库作为后端存储相关推荐
- 微软企业库4.1学习笔记(十)企业库的设计
在设计整个企业库的过程中,使用了一系列的最佳实践.下面列出一些里面的最佳实践: 在核心库中使用了Common模块 使用了统一的命名约定和统一的版本 在设计的过程中使用单元测试 在所有模块中包含基础结构 ...
- 微软企业库4.1学习笔记(三十六)日志模块 简介
日志模块 企业库的日志模块简单的实现了日志功能的常用功能.开发者可以利用模块在下面的位置记录信息: 事件日志 电子邮件 数据库 消息队列 文本文件 WMI的事件查看器 自定义的位置 模块为记录在任何位 ...
- 微软企业库4.1学习笔记(三)企业库迁移和并行使用,以及企业库的扩展
一.迁移和并行使用 通常来说,企业库是建立在.NET 2.0 的基础上,使用后续版本的企业库也不需要改变任何代码.不需要将引用更新到新的程序集,也不需要在配置文件中指明程序集的正确版本. 这个版本4. ...
- 微软企业库4.1学习笔记(八)创建对象 续集2
3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要,你可以指定下面的一条或者多条: 你可以在Unity配置中指定想要的BlockExtensions 你可以在Unity配置中 ...
- 微软企业库4.1学习笔记(七)创建对象 续集1
3.2使用Unity模块创建企业库对象 下面介绍如何使用前面的方法获取企业库对象的实例.代码示例如下 IUnityContainer containter = new UnityContainer( ...
- 微软企业库4.1学习笔记(六)创建对象
一.创建应用模块对象 在你的应用中经常会需要创建例如Database或者是CacheManager之类的对象,企业库支持一系列的方法,可以创建应用需要的对象. 你可以使用工厂方法创建这些对象,企业库的 ...
- 微软企业库5.0学习笔记(三十三)数据访问模块
前言 鉴于企业库5.0已经发布正式版,同时有广大读者的要求(臭屁一下,o(∩_∩)o...),后面文章的内容和代码将基于Enterprise Library5.0和Unity2.0来写,感谢大家的一贯 ...
- 微软企业库5.0学习笔记(四)配置企业库
http://blog.csdn.net/sfbirp/archive/2010/05/18/5603567.aspx 转载于:https://www.cnblogs.com/Rising/archi ...
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
原文地址:http://www.cnblogs.com/kyo-yo/archive/2010/11/01/Learning-EntLib-Tenth-Decoupling-Your-System-U ...
最新文章
- Redis-cluster架构
- [BUUCTF-pwn]——ciscn_2019_sw_1
- 因为10万元 乐视云计算又把自己折腾成失信被执行人...
- 佛祖保佑,永无BUG
- 将rdd存储到本地的一个文件中
- Jquery 网站保存信息提示消息实现,提示后自动消失
- CUMCM 2021-B:乙醇偶合制备C4烯烃(1)
- 台湾移动互联网为什么跑慢了?
- RS485MODBUS RTU转PROFINET网关/PROFINET转MODBUS RTU网关将施耐德ATV610变频器接入西门子1500 PROFINET网络配置方法
- 单龙芯3A3000-7A1000PMON研究学习-(17)撸起袖子干-分析代码前的准备工作4-地址映射
- Push to branch was rejected
- 八段数码管数字显示实验c语言,八段数码管显示实验.doc
- 每天一个linux命令(33):atq命令
- Python(爬虫篇)--- 破解加密【一】JS加密破解
- 即兴演讲的秘诀结构(一)
- 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能
- 两台计算机之间的直连
- matlab 画xos函数,振荡积分的数值计算与Matlab实现
- 不支持发行版本5 解决方法
- Block背后的数据结构及变量截取
热门文章
- (一)KitJs瀑布流组件特点
- NET CMS 大全
- Ubuntu 13.10/12.10/12.04 用户如何升级到 Ubuntu 14.04
- 了解下JavaScript中的prototype
- moodle升级完整过程
- struct timeval结构体 以及 gettimeofday()函数
- 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)
- 华为机试——字符串分隔
- Kubernetes—动态存储卷配置(StorageClass资源)(十二)
- 计算机专业大学四年应该怎么过才有意义?