数据库组件 Hxj.Data (二十二) (缓存)

  
  
  
  
  
  
  
  
  
  首先我是做web开发的,所以很多会偏向web的,组件使用的缓存是System.Web.HttpRuntime.Cache。
  组件在默认情况下是关闭缓存的。
  所以要开启缓存查询要做一下配置。
  先看一下例子配置: configSections>section name="HxjCacheConfig" type="Hxj.Data.CacheConfiguration,Hxj.Data"/>configSections>HxjCacheConfig enable="true">entities>add key="NorthwindConnectionString.Products" value="60">add>entities>HxjCacheConfig>connectionStrings>add name="NorthwindConnectionString" connectionString="Data Source=ricci\hu;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient
  HxjCacheConfig 节点的 enable 表示是否开启缓存,默认是关闭状态,除非显式开启 enable="true"。
  entities 节点下的配置就是对实体查询的缓存配置。 add key="NorthwindConnectionString.Products" value="60">add>
  表示connectionStrings中的节点name="NorthwindConnectionString"的连接下的Products表配置.
  value="60" 表示缓存60秒。
  所以一定要connectionStrings的name加上实体名,不然配置无效。
  当然value也可以是缓存依赖的文件。 表示Products表的查询缓存依赖程序根目录下的1.txt文件。组件会判断该文件是否存在,不存在则该配置无效。
  那测试一下缓存配置。 我们设置 enable="false",关闭缓存。
  看一下组件执行的sql: Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @1a6b9589aa23444c9e6e13049220c19d)
  Parameters: @1a6b9589aa23444c9e6e13049220c19d[Int32] = 1
  Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @61ce100cf8074e76abc8d205b3ec0a2e)
  Parameters: @61ce100cf8074e76abc8d205b3ec0a2e[Int32] = 1
  Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @c99aa7541e1543aca08c28f65c7b1d4d)
  Parameters: @c99aa7541e1543aca08c28f65c7b1d4d[Int32] = 1
  Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @c8f9ce2df63f451aa09cbc4fa62acd9c)
  Parameters: @c8f9ce2df63f451aa09cbc4fa62acd9c[Int32] = 1
  Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @d786265aa9bd40bfbc253814d6c16b13)
  Parameters: @d786265aa9bd40bfbc253814d6c16b13[Int32] = 1
  执行了5次查询。
  再设置 enable="true",开启缓存。
  再查看一下执行的sql: 只执行了一次sql连接。
  后面的四次都是直接从缓存中读取的。
  再次执行,所有的查询都是直接从缓存中返回回来,没有连接数据库。
  测试缓存文件依赖: 查看sql: Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @aa4964dae36c479792186ea95ce10b6e)
  Parameters: @aa4964dae36c479792186ea95ce10b6e[Int32] = 3
  Text: SELECTTOP 1 * FROM [Products] WHERE ([Products].[ProductID] = @e614d6bbc84c4603b159e30644665e07)
  Parameters: @e614d6bbc84c4603b159e30644665e07[Int32] = 3
  执行了两次,当修改文件后,缓存失效重新从数据库查询数据。
  其实测试的有时候输出一条sql,可能是执行的太快,缓存失效来不及。
  所以后来才加了System.Threading.Thread.Sleep(2000);
  再次刷新,就只输出一条sql,只执行一次,也就是修改1.txt文件后才重新查询数据库。
  查询判断是否有缓存配置是根据 FromProducts>()这里的Products来判断是否存在缓存配置的。
  对于ToDataReader()查询,是不会缓存的。
  当然用到ToDataReader的查询的其他方法也不会缓存,例如上一节中的Exists(WhereClip where)方法。
  下一节将讲述自定义缓存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值