CRL快速开发框架系列教程五(使用缓存)
本系列目录
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
- CRL快速开发框架系列教程三(更新数据)
- CRL快速开发框架系列教程四(删除数据)
- CRL快速开发框架系列教程五(使用缓存)
- CRL快速开发框架系列教程六(分布式缓存解决方案)
- CRL快速开发框架系列教程七(使用事务)
- CRL快速开发框架系列教程八(使用CRL.Package)
- CRL快速开发框架系列教程九(导入/导出数据)
- CRL快速开发框架系列教程十(导出对象结构)
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
- CRL快速开发框架系列教程十二(MongoDB支持)
- CRL快速开发框架系列教程十三(嵌套查询)
正文
缓存功能是CRL一大特色,使用起来再简单不过了
从数据库查询,到缓存调用,只是一个方法名的区别,创建维护全自动
如:
从数据库查
var item = Code.ProductDataManage.Instance.QueryItem(b => b.Id==1)
从缓存查
var item = Code.ProductDataManage.Instance.QueryItemFromCache(b=>b.Id==1);
查询多项
var list = Code.ProductDataManage.Instance.QueryFromCache(b => b.Id < 10);
缓存了多少数据
默认是缓存了对应表的所有数据,可以在管理类中重写查询指定缓存哪些数据
还可以按查询指定数据多长时间过期
这里是完整的查询语法,自由度很大,注意返回的结果类型
如下表示: 查询ID小于1000,过期时间为10分钟
public class ProductDataManage : CRL.BaseProvider<ProductData>
....
protected override CRL.LambdaQuery.LambdaQuery<ProductData> CacheQuery()
{
return GetLambdaQuery().Where(b => b.Id < 1000).Expire(10);
}
缓存过期了怎么办
如上面指定的是10分钟过期,到10分钟后会再次调用会返回什么,空值?老数据?
当然不是,CRL有缓存管理机制,并且是异步的,缓存创建后,后台线程会监视对应的缓存,如果到达了设定的过期时间
按原SQL查询(如上面重写的CacheQuery方法)重新查询,转换为对应的对象,加载到内存
缓存查找效率
内存查找也是比较费资源的事,特别是数据比较多的情况下,有没有优化的可能?
一般我们会按主键查询某个数据,这种情况比较多,CRL针对这种情况作了优化
如上面查询:
var item = Code.ProductDataManage.Instance.QueryItemFromCache(5);
从所有数据里查询主键为5的数据,看上去为
datas.FindAll(b=>b.Id==5)
实际查询为
if (datas.ContainsKey(id))
{
return datas[id];
}
CRL缓存数据结构是Dictionary<string, TModel>
在按主键查询的情况下,效率会高很多
将查询结果转换为缓存
除了按管理类绑定的缓存外,还可以装任意查询转换为缓存
var query = Code.ProductDataManage.Instance.GetLambdaQuery();
//缓存会按条件不同缓存不同的数据,条件不固定时,慎用
query.Where(b => b.Id < 700);
int exp = 10;//过期分钟
query.Expire(exp);
var list = query.ToList();
这时创建的查询缓存会按参数值不同,缓存N个结果,也是比较好用的
手动维护缓存
缓存一般情况下是自动维护的,也可以手动维护
获取缓存列表
var caches = CRL.MemoryDataCache.CacheService.GetCacheList();
在页面上显示
<table border="1" style="width:100%">
<tr>
<td class="auto-style5">KEY</td>
<td class="auto-style2">数据类型</td>
<td class="auto-style3">过期(分)</td>
<td class="auto-style4">上次更新</td>
<td width="50">行数</td>
<td width="200">查询</td>
<td width="100">参数</td>
<td width="40">操作</td>
</tr>
<%
foreach(var item in caches)
{
%>
<tr>
<td class="auto-style5"><%=item.Key %></td>
<td class="auto-style2"><%=item.DataType %></td>
<td class="auto-style3"><%=item.TimeOut %></td>
<td class="auto-style4"><%=item.UpdateTime %></td>
<td><%=item.RowCount %></td>
<td><%=item.TableName %></td>
<td><%=item.Params %></td>
<td><a href="?type=update&key=<%=item.Key %>" target="_blank">更新</a></td>
</tr>
<%} %>
</table>
运行如图
通过KEY更新缓存
string key = Request["key"];
var a = CRL.MemoryDataCache.CacheService.UpdateCache(key);
CRL快速开发框架系列教程五(使用缓存)的更多相关文章
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- Kooboo CMS技术文档之五:站点配置管理
站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...
- 【Net跨平台第一步】逆天带你零基础Linux入门【更新完毕】
部分讲义:(视频已删,后期以文档形式发布)
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- Phoenix综述(史上最全Phoenix中文文档)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...
- html5 与视频
1.视频支持格式. 有3种视频格式被浏览器广泛支持:.ogg,.mp4,.webm. Theora+Vorbis=.ogg (Theora:视频编码器,Vorbis:音频编码器) H.264+$$$ ...
- js报错: Uncaught RangeError: Invalid string length
在ajax请求后得到的json数据,遍历的时候chrome控制台报这个错误:Uncaught RangeError: Invalid string length,在stackoverflow查找答案时 ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- RMS:Microsoft Office检测到您的信息权限管理配置有问题。有关详细信息,请与管理员联系。(转)
原文:https://zhidao.baidu.com/question/435088233.html RMS有两种方式: 1.使用微软的服务器,这个是连接到微软的服务器上面做权限控制,在今年5月份之 ...