C# SqlSugar框架的学习使用(七)-- 二级缓存的使用

前言

上一篇《C# SqlSugar框架的学习使用(六)-- 扩展用法》把一些常用的扩展用法已经做了出来,本篇就来讲一下SqlSugar高级用法中的二级缓存功能。

二级缓存功能

介绍及使用方法

二级缓存功能是对查询出来的数据进行缓存,在缓存不失效的情况下,下次同样的查询操作都会从缓存内读取。


使用缓存查询

 var list=db.Queryable<Student, School>((s1, s2) => s1.Id == s2.Id).Select(s1 => s1).WithCache().ToList();//可以设置过期时间WithCache(60)

删除缓存

我们需要删除缓存也相当方便,只需要在对该表操作的时候加 RemoveDataCache 就能把查询中引用该表的缓存全部清除

  db.Deleteable<Student>().Where(it => it.Id == 1).RemoveDataCache().ExecuteCommand();

Updateable和Insertable的用法是一样的。

使用技巧

解决分页缓存的难题,我们知道用到分页的表数的数据量都很大不可能使用缓存,所以提供了一个WithCacheIF的来方便的针对指定条件缓存

WithCacheIF(pageIndex<2) //只对页码小于2的进行缓存


创建二级缓存对象

创建二级缓存对象,需要在SqlSugarClient对象创建时加入自己写的实现缓存

format,png

缓存类分为两种:

.Net自带Cache的cs文件网盘下载地址:

https://pan.baidu.com/s/1Z6l9p4q-9Tuev_xWrXcFtg

Redis的cs文件网盘下载地址:

https://pan.baidu.com/s/1EAvvIffDFcnmsBW2hMIgxg


代码演示

数据源为Pos表和tvippayfl表

format,png

然后把二级缓存的两个cs文件拷贝到项目中,如下图:

format,png

HttpRuntimeCache.cs需要加引用System.Web

RedisCache.cs需要引用ServiceStack.Redis,这个可以通过Nuget包安装即可

数据库连接里面加入二级缓存配置

        /// <summary>
        /// 连接数据库
        /// </summary>
        /// <param name="connstr"></param>
        private void ConnectDb(string connstr)
        {
            _db = new SqlSugarClient(
                new ConnectionConfig()
                {
                    ConnectionString = _connstr,
                    DbType = SqlSugar.DbType.SqlServer, //设置数据库类型
                    IsAutoCloseConnection = true, //自动释放数据务,如果存在事务,在事务结束后释放
                    InitKeyType = InitKeyType.Attribute, //从实体特性中读取主键自增列信息
                    ConfigureExternalServices = new ConfigureExternalServices()
                    {
                        DataInfoCacheService = new HttpRuntimeCache() //RedisCache是继承ICacheService自已实现的一个类
                    }
                });


            //用来打印Sql方便你调式    
            _db.Aop.OnLogExecuting = (sql, pars) =>
            {
                TextShow(sql);
                TextShow(_db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            };
        }

我这里本机重做系统后还没装Redis,所以这里我们只演示.net自带的Cache

format,png

窗体界面中加入按钮功能

format,png

实现方法

  1. 将tVipPayFlow表中和Pos表中Posno字段相等的数据取出来存入缓存中

  2. 把缓存中数据的bankno字段原来为空的改为Posno的值加上Serialno的值

  3. 改完后的数据重新插入进tVipPayFlow中并删除缓存


将tVipPayFlow表中和Pos表中Posno字段相等的数据取出来存入缓存中

format,png

把缓存中数据的bankno字段原来为空的改为Posno的值加上Serialno的值

format,png

改完后的数据重新插入进tVipPayFlow中并删除缓存

format,png

完整代码

        private void tsmnucacheinsert_Click(object sender, EventArgs e)
        {
            try
            {
                //将tVipPayFlow表中和Pos表中Posno字段相等的数据
                //取出来存入缓存中
                List<tVipPayFlow> list = _db.Queryable<POS, tVipPayFlow>(
                        (t1, t2) => t1.Posno == t2.PosNo)
                    .Select((t1, t2) => t2)
                    .WithCache()
                    .ToList();
                TextShow("缓存了" + list.Count + "条数据");


                //把缓存中数据的bankno字段原来为空的
                //改为Posno的值加上Serialno的值
                list.ForEach(p=>p.bankno=p.PosNo+p.SerialNo);
                TextShow("更新了bankno的值");


                //改完后的数据重新插入进tVipPayFlow中
                int count = _db.Insertable(list)
                    .RemoveDataCache()
                    .ExecuteCommand();
                TextShow("插入了" + count + "条带有bankno数据");
            }
            catch (Exception ex)
            {
                TextShow(ex.Message);
            }
        }

执行完后的结果

format,png

我们再查一下数据库,里面也正是多了我们插入的400条数据

format,png

-END-

Vaccae的往期经典


OpenCV

《C++ OpenCV案例实战---卡号获取

《C++ OpenCV案例实战---卡片截取(附代码)

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量

《C++ OpenCV实战---利用颜色分割获取数量》

《OpenCV4Android NDK方式进行Canny边缘检测》

《OpenCV4Android NDK方式TesserartOCR实时进行识别》

《OpenCV4Android NDK级联方式实时进行人脸检测》


Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串

《Android碎片化布局fragment的实战应用

《Android中RecyclerView嵌套RecyclerView

《Android里用AsyncTask后的接口回调


.Net C#

《C#自定义特性(Attribute)讲解与实际应用

《C#根据类生成签名字符串(附DEMO下载地址)

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类


数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)

《SQL随机增加销售数据的脚本编写(附脚本下载地址)

SQL Server中With As的介绍与应用(三)--递归的实战应用

《Oracle通过ODBC连接SQL Server数据库

Oracle利用row_number()over()方式解决插入数据时重复键的问题


长按下方二维码关注微卡智享

format,png

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值