第三篇 Entity Framework Plus 之 Query Cache
离上一篇博客,快一周,工作太忙,只能利用休息日来写一些跟大家分享,Entity Framework Plus 组件系列文章,之前已经写过两篇
第一篇 Entity Framework Plus 之 Audit
第二篇 Entity Framework Plus 之 Query Future
计划还会写两篇,一篇是关于查询缓存的(二级缓存),一篇是批量操作(只讲更新,删除)。
今天写查询缓存,标题 第三篇 Entity Framework Plus 之 Query Cache ,废话不多说,直接实作。
一. 代码实现
1. 解决方案还是前两篇的用的 “EntityFrameworkPlusSolution” 解决方案,在“01.Demo” 解决方案文件夹,新增“EntityFrameworkPlus.QueryCache.Demo” Windows 项目(为什么要用Windows 项目,方便Demo和测试而已。)
2. “EntityFrameworkPlus.QueryCache.Demo” 项目中,删除原来Form1 窗口相关文件,分别新增“QueryCache” 后,“NoExpirationQueryCache”,“AbsoluteExpirationQueryCache”,“SlidingExpirationQueryCache” 窗口,界面设计分别如下图。
QueryCache
NoExpirationQueryCache
AbsoluteExpirationQueryCache
SlidingExpirationQueryCache
四个界面很简单,这里大概介绍一下,
QueryCache 就像操作台一样,是其他三个界面入口点。
NoExpirationQueryCache 不做缓存过期时间设置查询缓存
AbsoluteExpirationQueryCache 指定缓存过期时间(以秒为单位) 设置查询缓存
SlidingExpirationQueryCache 最后一次访问缓存时间间隔(以秒为单位) 设置查询缓存
3. 代码
QueryCache
using System;
using System.Windows.Forms; namespace EntityFrameworkPlus.QueryCache.Demo
{
public partial class QueryCache : Form
{
public QueryCache()
{
InitializeComponent();
} private void btnNoExpirationQueryCache_Click(object sender, EventArgs e)
{
new NoExpirationQueryCache().ShowDialog();
} private void btnAbsoluteExpirationQueryCache_Click(object sender, EventArgs e)
{
new AbsoluteExpirationQueryCache().ShowDialog();
} private void btnSlidingExpirationQueryCache_Click(object sender, EventArgs e)
{
new SlidingExpirationQueryCache().ShowDialog();
}
}
}
NoExpirationQueryCache
using System;
using System.Windows.Forms;
using EntityFrameworkPlus.DbContext;
using Z.EntityFramework.Plus; namespace EntityFrameworkPlus.QueryCache.Demo
{
public partial class NoExpirationQueryCache : Form
{
public NoExpirationQueryCache()
{
InitializeComponent();
} private void btnSearch_Click(object sender, EventArgs e)
{
using (var db = new EntityFrameworkPlusDbContext())
{
var orders = db.Goodses.FromCache();
dgList.DataSource = orders;
}
}
}
}
AbsoluteExpirationQueryCache
using System;
using System.Windows.Forms;
using EntityFrameworkPlus.DbContext;
using Z.EntityFramework.Plus; namespace EntityFrameworkPlus.QueryCache.Demo
{
public partial class AbsoluteExpirationQueryCache : Form
{
public AbsoluteExpirationQueryCache()
{
InitializeComponent();
} private void btnSearch_Click(object sender, EventArgs e)
{
using (var db = new EntityFrameworkPlusDbContext())
{
var second = Convert.ToDouble(txtAbsoluteExpiration.Text.Trim());
var absoluteExpirationSecond = DateTime.Now.AddSeconds(second);
var orders = db.Goodses.FromCache(absoluteExpirationSecond);
dgList.DataSource = orders;
}
}
}
}
SlidingExpirationQueryCache
using System;
using System.Runtime.Caching;
using System.Windows.Forms;
using EntityFrameworkPlus.DbContext;
using Z.EntityFramework.Plus; namespace EntityFrameworkPlus.QueryCache.Demo
{
public partial class SlidingExpirationQueryCache : Form
{
public SlidingExpirationQueryCache()
{
InitializeComponent();
} private void btnSearch_Click(object sender, EventArgs e)
{
using (var db = new EntityFrameworkPlusDbContext())
{
var second = Convert.ToDouble(txtSlidingExpiration.Text.Trim());
var options = new CacheItemPolicy() { SlidingExpiration = TimeSpan.FromSeconds(second) };
var orders = db.Goodses.FromCache(options);
dgList.DataSource = orders;
}
}
}
}
代码就不做解释,等一下逐个测试一下给大家看,查询的信息是上一篇第二篇 Entity Framework Plus 之 Query Future商品信息(Sample_Goods),查询后会直接展示到DataGridView里面。
二.测试效果(记得打开SQL Profiler 追踪SQL)
NoExpirationQueryCache 不做缓存过期时间设置查询缓存
1. 点击查询按钮一次,Demo如下图
2. 清空一下Sql Profiler 执行的SQL(这个应该不用我教大家都会),接着连续点击查询按钮,Demo如图
DataGridView 依旧会有数据展示出来,但是SQL Profiler 是没有执行查询商品信息的SQL,说明之后查询是取缓存中的,如果缓存中存在,就不去执行SQL.
AbsoluteExpirationQueryCache 指定缓存过期时间(以秒为单位) 设置查询缓存 (每次Demo另外一个场景,把程序关闭一次,避免Demo不会有问题。)
1. 设置缓存过期时间为10秒,点一次查询,Demo如下图
2. 清空一下Sql Profiler 执行的SQL,然后在10范围内,连续点查询,Demo如下图
3. 过了10秒在点查询按钮,Demo 如下图
从上面三种操作,说明10秒内,点击查询,商品信息,已经被缓存,就不会和数据库进行交流,当过了10秒商品信息的缓存就会自动清除,重新到数据库取数据。
SlidingExpirationQueryCache 最后一次访问缓存时间间隔(以秒为单位) 设置查询缓存
1. 最后访问缓存时间间隔设置10s ,点击查询,Demo如下图
2. 清空一下Sql Profiler 执行的SQL,连续点击查询按钮,只要最后一次访问缓存不超过10s,Demo如下图
3. 最后一次访问缓存时间间隔晚于10s ,Demo如下图
从上面三种操作来看,只要最后一次访问缓存不超过设置时间间隔,即就不会和数据库打交道,总是会取缓存数据,否则不然。
到此 Entity Framework Plus 之 Query Cache 就写完,大家可以更加深入的了解 Entity Framework Plus Query Cache 可以自行看源码
Entity Framework Plus GitHub :https://github.com/zzzprojects/EntityFramework-Plus
本博文源代码 :https://github.com/haibozhou1011/EntityFramework-PlusSample
第三篇 Entity Framework Plus 之 Query Cache的更多相关文章
- 第二篇 Entity Framework Plus 之 Query Future
从性能的角度出发,能够减少 增,删,改,查,跟数据库打交道次数,肯定是对性能会有所提升的(这里单纯是数据库部分). 今天主要怎样减少Entity Framework查询跟数据库打交道的次数,来提高查询 ...
- 第一篇 Entity Framework Plus 之 Audit
一般系统会有登陆日志,操作日志,异常日志,已经满足大部分的需求了.但是有时候,还是需要Audit 审计日志,审计日志,主要针对数据增,改,删操作数据变化的记录,主要是对数据变化的一个追踪过程.其中主要 ...
- .NET基础篇——Entity Framework 数据转换层通用类
在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity F ...
- 第四篇 Entity Framework Plus 之 Batch Operations
用 Entity Framework 进行 增,删,改.都是基于Model进行的,且Model都是有状态追踪的.这样Entity Framework才能正常增,删,改. 有时候,要根据某个字段,批量 ...
- Entity Framework Plus 系列目录
Entity Framework Plus 系列文章计划的已经全部写完,可能还有其他功能没有写到,希望大家能够多动手,尝试一下使用,一定会给您带来一些帮助的.文章全部写完,也应该出一个目录方便查看,目 ...
- entity framework 新手入门篇(3)-entity framework实现orderby,count,groupby,like,in,分页等
前面我们已经学习了entityframework的基本的增删改查,今天,我们将在EF中实现一些更加贴近于实际功能的SQL方法. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和 ...
- C# Entity Framework并发处理
原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...
- Entity Framework 之Database first(数据库优先)&Model First(模型优先)
一.什么是Entity Framework 1.1 实体框架(EF)是一个对象关系映射器,使.NET开发人员使用特定于域的对象与关系数据.它消除了需要开发人员通常需要编写的大部分数据访问代码.简化了原 ...
- C#综合揭秘——Entity Framework 并发处理详解
引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...
随机推荐
- UE4新手引导之下载和安装虚幻4游戏引擎
1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新.博客更新.新闻和商城等.自2015年起,该引擎已经提供免费下 ...
- NLP点滴——文本相似度
[TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
- React Native 之 Text的使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- Spring MVC注解开发入门
注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...
- 虚拟机体验之 VirtualBox 篇 —— 性能强大的经典架构
前两篇体验了 QEMU 和经过 KVM 加速的 QEMU,并体验了第三方虚拟机管理工具 virt-manager,让我们见识了开源社区的强大和开源虚拟机软件的高质量和高性能.这一篇,我来剖析一下 Vi ...
- 电商系统中的商品模型的分析与设计—续
前言 在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介 ...
- ASP.NET MVC Model元数据(三)
ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...
- 用Go语言做产品半年的一些感觉
用Go语言做产品刚好半年,有一些感觉跟大家说道说道. 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响.甚至在Visual Studio的娇惯下认为,不能调试基本 ...