我的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 即可。
我的ORM之十一 -- 缓存的更多相关文章
- orm框架与缓存的关系
1.mybatis规定,一级缓存没必要bean类实现序列化,但二级缓存bean类必须实现序列化. 因为二级缓存是基于namespace的也就是基于接口的,二级缓存可以设置存储源,可以是redis或者m ...
- Django ORM Queryset 的缓存机制, 惰性查询简述
在Django的ORM中 必须注意由于QuerySet的 cache导致的数据获取不正确的问题 在哪些情况下不会出发QuerySet缓存? 隐式存储QuerySet(查询语句没有显示赋值给变量而直接进 ...
- mybatis学习 十一 缓存
1. 应用程序和数据库交互的过程是一个相对比较耗时的过程2. 缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率3. MyBatis 中默认 SqlSession 缓存(一级缓存)开启 同 ...
- 我的ORM汇总
MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...
- 说说数据库架构,ORM缓存和路由
为什么在ORM层做缓存,而不是DB层 ORM能有效地提高程序员的开发效率,程序员更喜欢操作对象而不是数据库,他们不关心也不想手写一堆SQL语句,毕竟一个公司里普通程序员要占多数,他们并不是非常熟悉数据 ...
- CYQ.Data V5 分布式自动化缓存设计介绍
前方: 其实完成这个功能之前,我就在思考:是先把想法写了来,和大伙讨论讨论后再实现,还是实现后再写文论述自己的思维. 忽然脑后传来一个声音说:你发文后会进入发呆阶段. 所以还是静下心,让我轻轻地把代码 ...
- Hibernate缓存原理与策略
Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...
- Hibernate缓存原理与策略 Hibernate缓存原理:
Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...
- 是谁决定了走redis缓存?当然是mybatis啊
1.是谁决定了走redis缓存?当然是mybatis啊 mybatis里默认实现数据的增删改查功能,这里要用到缓存啊 而且是mybatis这种orm框架采用缓存机制的,mybatis默认都有两层缓存了 ...
随机推荐
- 提交ajax验证用户名是否已存在
前端页面 <tr> <td class="p_label"><span class="notnull"></span& ...
- 在github上搭建博客的问题
最近想到要建立一个自己的博客,以便记录自己在学习中遇到的问题.发现github免费提供空间,正好可以利用它来搭建自己的博客.毕竟github pages免费空间,不限制流量,每次的博客改动和博客模板的 ...
- Spring.Scheduling.Quartz 作业的应用(定时任务和循环触发任务)
.定时任务的实现,比如有个任务是要晚上2点10分的时候要去触发的,先定义这个任务类RskBookFilterInitDiningService.cs,这里其实有两种实现,一种是需要继承QuartzJo ...
- mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)
数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一种展现如图----[多行变一列](合并后的数据在同一列上): sql如下: select name ...
- DOCTYPE的详细图解
之前有一次写代码的时候忘记写了<!DOCTYPE html> 导致样式的效果一直有点问题,查了很久才发现时候这个的锅.之后自己详细的来查找了DOCTYPE的作用. 在目前,基本上都是采用浏 ...
- filter之排除个别过滤
1.jsp 篇 一般拦截器设置都是拦截*.action.*.jsp等,如此我们可以扩展后缀名,逃过拦截: jsp的话,可以改成.jspf后缀. ( 把一个JSP文件命名为jspf扩展名,然后inclu ...
- 用datagrid实现完整的一个页面
打怪升级真的好难,记录一点一滴,一滴一点,先上效果图. 1.想完成一个界面,先得有界面.界面是在WebRoot下的根目录文件中新建的zjqktj.jsp中建立的,再通过java在后台调用数据库取出数据 ...
- 编译运行java程序出现Exception in thread "main" java.lang.UnsupportedClassVersionError: M : Unsupported major.minor version 51.0
用javac编译了一个M.java文件, 然后用java M执行,可是出现了下面这个错误. Exception in thread "main" java.lang.Unsuppo ...
- maven SpringMVC easyUI项目创建
在Eclipse中使用Maven创建SpringMVC项目,项目所需软件及工具可以在官网下载.Maven.Nexus及Eclipse集成Maven等到此配置完毕. 1.Maven创建Web项目. 打开 ...
- javaweb中实现在线人数统计
session并不是浏览器关闭时销毁的,而是在session失效的时候销毁下列代码就是监测session创建.销毁 package com.my.count; import javax.servlet ...