本系列目录

  1. CRL快速开发框架系列教程一(Code First数据表不需再关心)
  2. CRL快速开发框架系列教程二(基于Lambda表达式查询)
  3. CRL快速开发框架系列教程三(更新数据)
  4. CRL快速开发框架系列教程四(删除数据)
  5. CRL快速开发框架系列教程五(使用缓存)
  6. CRL快速开发框架系列教程六(分布式缓存解决方案)
  7. CRL快速开发框架系列教程七(使用事务)
  8. CRL快速开发框架系列教程八(使用CRL.Package)
  9. CRL快速开发框架系列教程九(导入/导出数据)
  10. CRL快速开发框架系列教程十(导出对象结构)
  11. CRL快速开发框架系列教程十一(大数据分库分表解决方案)
  12. CRL快速开发框架系列教程十二(MongoDB支持)
  13. 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快速开发框架系列教程五(使用缓存)的更多相关文章

  1. CRL快速开发框架系列教程六(分布式缓存解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程二(基于Lambda表达式查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  2. C++内存对齐总结

    大家都知道,C++空类的内存大小为1字节,为了保证其对象拥有彼此独立的内存地址.非空类的大小与类中非静态成员变量和虚函数表的多少有关. 而值得注意的是,类中非静态成员变量的大小与编译器内存对齐的设置有 ...

  3. ABP文档 - Mvc 控制器

    文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...

  4. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  5. 转:聊聊mavenCenter和JCenter

    Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢? maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的 ...

  6. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  7. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  8. MJRefresh 源码解读 + 使用

    MJRefresh这个刷新控件是一款非常好用的框架,我们在使用一个框架的同时,最好能了解下它的实现原理,不管是根据业务要求在原有的基础上修改代码,还是其他的目的,弄明白作者的思路和代码风格,会受益匪浅 ...

  9. 利用Select2优化@Html.ListBoxFor显示,学会用MultiSelectList

    最近需要用到多选框,Asp.Net MVC自带的@Html.ListBox或@Html.ListBoxFor的显示效果太差,于是找到了Select2进行优化,并正式了解了多选框的操作方法. 首先介绍多 ...

  10. 【转】 FineBI:自助式BI工具打造业务分析的“快与准”

    如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...