我的ORM之十一 -- 缓存
对某一个查询频繁重复,应该使用缓存。
缓存应该是可以配置。
配置
Web.config:
<configuration> <configSections> <section name="MyOql" type="MyOql.MyOqlConfigSect,MyOql" /> </configSections> <MyOql configSource="MyOql.config" /> </configuration>
MyOql.config:
<MyOql> <Entitys db="dbo" CacheTime="0" CacheSqlTime="0" MaxCacheTime="43200" OraclePKG="PKG" Owner="dbo" > <Group Name="本地缓存" CacheType="Local" CacheSqlTime="3600" CacheTime="3600" > <Entity Name="S_Menu" UsePower="=" /> <Entity Name="P_CarInfo" /> </Group> </Entitys> <DbProviders> <Provider Name="SqlServer" Type="MyOql.Provider.SqlServer,MyOql"/> <Provider Name="MySql" Type="MyOql.Provider.MySql,MyOql.MySql"/> <Provider Name="Oracle" Type="MyOql.Provider.Oracle,MyOql.OracleProvider"/> </DbProviders> </MyOql>
配置项
db: 指定数据库配置项
Owner: 指定数据库前缀
Name: 数据库表名,视图名,存储过程名。
CacheTime: 单表按主键、唯一键、自增键查询缓存时间。单位 秒
CacheSqlTime: 按除 CacheTime 之外的情况下,缓存时间。如果有多个表,按配置项最小的缓存时间。 单位 秒
ToShadow: 配置是否转存到影子库,当物理删除的时候,可以把数据转存到影子库。布尔值
MaxCacheTime: 如果最初缓存时间到现在超过最大缓存时间,则强制失效。单位 秒
CacheType: 指定缓存服务器。
UsePower: 权限类型,单字符表示一个权限,可选类型: CRUD= ~*
其中:
C 表示 Create,R 表示Read,U表示Update,D表示Delete。
= 表示是否启用行集权限.
~ 表示自定义过滤。
* 是所有权限
true 表示所有权限
false 表示没有任何权限
Filter: 在 UsePower = "~" 时, Filter 表示传递给自定义过滤的 关键字
Type: 表示表的类型, 如: Corp 表示是公司表。可以动态对该表进行分库。
Log: 可选值,单个字符表示一个MyOql操作类型的日志, CRUD=*
OraclePKG: Oracle存储过程包名。
缓存部署及机制
数据库中的数据,可以分为:
- 稳定数据
- 易变数据
如果有多个应用,这种场景更明显。
- 易变数据的缓存管理不应该寄宿在各自的应用程序池中。应该统一有一个缓存管理中心;
- 稳定数据,应该在各自的应用程序池中寄存,以增强性能
稳定数据,是相对的,稳定数据也有被更新的时候,用以下办法破坏它。
- 设置 最大缓存时间,一旦第一次缓存时间超过最大缓存时间,则强制失效。
- 缓存中心记录每个表的最后破坏时间,稳定数据所在的程序,周期性检测。
MyOqlCache是以Windows服务形式,提供基于 TCP 协议的 WCF 服务 ,安装步骤:
1. 编译 DbEnt
2. 编译 MyOqlCache,如果出错,请检查 Dll 文件路径。
3. 运行 MyOqlCache\安装.bat
NoSql的应用
所谓术业有专攻,NoSql和RMDB不在一个层次上,无法替换。使用 NoSql 做为缓存项,或是保存中间计算结果倒是很合适。
RMDB大都是基于磁盘文件的,NoSql大都是基于内存的。能和NoSql比性能的,应该是 内存数据库!
目前缓存中心使用的是 System.Runtime.Cache 保存缓存项。如果想使用 NoSql ,需要:
1. 打开 MyOqlCache 项目,打开 MyOqlCache.cs ,找到 dbo.CacheInstance
2. 仿照 MyOqlHttpCacheDefaultInstance 重新一个类,并赋值给 dbo.CacheInstance 即可。
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |