本系列目录

  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一大特色,使用起来再简单不过了

从数据库查询,到缓存调用,只是一个方法名的区别,创建维护全自动

如:

从数据库查

  1. var item = Code.ProductDataManage.Instance.QueryItem(b => b.Id==1)

从缓存查

  1. var item = Code.ProductDataManage.Instance.QueryItemFromCache(b=>b.Id==1);

查询多项

  1. var list = Code.ProductDataManage.Instance.QueryFromCache(b => b.Id < 10);

缓存了多少数据

默认是缓存了对应表的所有数据,可以在管理类中重写查询指定缓存哪些数据

还可以按查询指定数据多长时间过期

这里是完整的查询语法,自由度很大,注意返回的结果类型

如下表示: 查询ID小于1000,过期时间为10分钟

  1. public class ProductDataManage : CRL.BaseProvider<ProductData>
  2. ....
  3. protected override CRL.LambdaQuery.LambdaQuery<ProductData> CacheQuery()
  4. {
  5. return GetLambdaQuery().Where(b => b.Id < 1000).Expire(10);
  6. }

缓存过期了怎么办

如上面指定的是10分钟过期,到10分钟后会再次调用会返回什么,空值?老数据?

当然不是,CRL有缓存管理机制,并且是异步的,缓存创建后,后台线程会监视对应的缓存,如果到达了设定的过期时间

按原SQL查询(如上面重写的CacheQuery方法)重新查询,转换为对应的对象,加载到内存

缓存查找效率

内存查找也是比较费资源的事,特别是数据比较多的情况下,有没有优化的可能?

一般我们会按主键查询某个数据,这种情况比较多,CRL针对这种情况作了优化

如上面查询:

  1. var item = Code.ProductDataManage.Instance.QueryItemFromCache(5);

从所有数据里查询主键为5的数据,看上去为

  1. datas.FindAll(b=>b.Id==5)

实际查询为

  1. if (datas.ContainsKey(id))
  2. {
  3. return datas[id];
  4. }

CRL缓存数据结构是Dictionary<string, TModel>

在按主键查询的情况下,效率会高很多

将查询结果转换为缓存

除了按管理类绑定的缓存外,还可以装任意查询转换为缓存

  1. var query = Code.ProductDataManage.Instance.GetLambdaQuery();
  2. //缓存会按条件不同缓存不同的数据,条件不固定时,慎用
  3. query.Where(b => b.Id < 700);
  4. int exp = 10;//过期分钟
  5. query.Expire(exp);
  6. var list = query.ToList();

这时创建的查询缓存会按参数值不同,缓存N个结果,也是比较好用的

手动维护缓存

缓存一般情况下是自动维护的,也可以手动维护

获取缓存列表

  1. var caches = CRL.MemoryDataCache.CacheService.GetCacheList();

在页面上显示

  1. <table border="1" style="width:100%">
  2. <tr>
  3. <td class="auto-style5">KEY</td>
  4. <td class="auto-style2">数据类型</td>
  5. <td class="auto-style3">过期(分)</td>
  6. <td class="auto-style4">上次更新</td>
  7. <td width="50">行数</td>
  8. <td width="200">查询</td>
  9. <td width="100">参数</td>
  10. <td width="40">操作</td>
  11. </tr>
  12. <%
  13. foreach(var item in caches)
  14. {
  15. %>
  16. <tr>
  17. <td class="auto-style5"><%=item.Key %></td>
  18. <td class="auto-style2"><%=item.DataType %></td>
  19. <td class="auto-style3"><%=item.TimeOut %></td>
  20. <td class="auto-style4"><%=item.UpdateTime %></td>
  21. <td><%=item.RowCount %></td>
  22. <td><%=item.TableName %></td>
  23. <td><%=item.Params %></td>
  24. <td><a href="?type=update&key=<%=item.Key %>" target="_blank">更新</a></td>
  25. </tr>
  26. <%} %>
  27. </table>

运行如图

通过KEY更新缓存

  1. string key = Request["key"];
  2. 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. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  3. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  4. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  5. HTML渲染过程详解

    无意中看到寒冬关于前端的九个问题,细细想来我也只是对第一.二.九问有所了解,正好也趁着这个机会梳理一下自己的知识体系.由于本人对http协议以及dns对url的解析问题并不了解,所以这里之探讨url请 ...

  6. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  7. 在.Net中实现自己的简易AOP

    RealProxy基本代理类 RealProxy类提供代理的基本功能.这个类中有一个GetTransparentProxy方法,此方法返回当前代理实例的透明代理.这是我们AOP实现的主要依赖. 新建一 ...

  8. 在 Laravel 中使用图片处理库 Integration/Image

    系统需求 PHP >= 5.3 Fileinfo Extension GD Library (>=2.0) … or … Imagick PHP extension (>=6.5.7 ...

  9. 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇

    Redis 安装 & 配置 本测试环境将在 CentOS 7 x64 上安装最新版本的 Redis. 1. 运行以下命令安装 Redis $ wget http://download.redi ...

  10. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...