本系列目录

  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. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  2. UWP开发必备以及常用知识点总结

    一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...

  3. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)

    100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...

  4. python 数据类型---文件二

    1.打印进度条 import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() #不等缓冲 ...

  5. MFC单文档程序添加HTML帮助支持

    1.在App类 构造函数中添加 EnableHtmlHelp(); 2.在Frame类中,添加消息影射: ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFin ...

  6. SAP CRM 显示消息/在消息中进行导航

    向用户展示消息,在任何软件中都是十分重要的. 在SAP CRM WEB UI中展示消息,不是一项很难的任务,只需要创建消息并在之后调用方法来显示它 消息类和消息号: 我在SE91中创建了如下的消息类和 ...

  7. 移动BPM解决方案分享

    畅通开放  无边界的渠道 效率倍增  更高效的处理方式 即时共享  更强大的决策能力 各种终端应用 帮您实现:新任务通知.任务预警.催办.任务审批.任何数据汇总提醒消息通知...... 短信 客户端: ...

  8. React Native环境配置之Windows版本搭建

    接近年底了,回想这一年都做了啥,学习了啥,然后突然发现,这一年买了不少书,看是看了,就没有完整看完的.悲催. 然后,最近项目也不是很紧了,所以抽空学习了H5.自学啃书还是很无趣的,虽然Head Fir ...

  9. Linux根文件系统分析之init和busybox

    Hi,大家好!我是CrazyCatJack.今天给大家讲解Linux根文件系统的init进程和busybox的配置及编译. 先简单介绍一下,作为一个嵌入式系统,要想在硬件上正常使用的话.它的软件组成大 ...

  10. C 盘的不速之客

      C 盘的报告内容既然上GB的空间 操作系统版本 原来是微软这个查找解决异常关闭解决方案生成的报告   参考 How To Disable Vista Error Reporting Feature ...