C#使用缓存存储数据以及查询

在代码中使用缓存可以减少对数据库的访问,减少数据库的压力,在高并发的情况下效果特别明显。

public string GetWaitInfo(int corpId, int plantformId)
        {
            SCommBB commBB = new SCommBB();
            try
            {
                //查询sql
                string startDt = DateTime.Now.ToString("yyyy-MM-dd");
                string endDt = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
                string waitSql = @"SELECT COUNT(1) AS waitAmount,corpId
FROM AP_VC_VaccineInoculateCall  a with(nolock)
INNER JOIN AP_VC_VaccineInoculateRegister b  with(nolock) ON a.vaccineInoculateRegisterId=b.id
WHERE     a.isEnd=0 AND a.isSkip=0 AND b.registerDt>='{0}' 
group by corpId";
                 
                waitSql = string.Format(waitSql, startDt,  plantformId);
                
                DataTable WaitDT = new DataTable();
                
                
                if (HttpRuntime.Cache["GetIceBoxGetWaitInfo_Time"] != null && HttpRuntime.Cache["GetIceBoxGetWaitInfo"] != null)
                {
                //五秒才查一次,否则从缓存里面查
                    if ((DateTime.Now - Convert.ToDateTime(HttpRuntime.Cache["GetIceBoxGetWaitInfo_Time"])).TotalSeconds >= 5
                        && Monitor.TryEnter(HttpRuntime.Cache["GetIceBoxGetWaitInfo_Time"])
                        && Monitor.TryEnter(HttpRuntime.Cache["GetIceBoxGetWaitInfo"]))
                    {
                        WaitDT = commBB.Query(waitSql).Tables[0];
                        HttpRuntime.Cache["GetIceBoxGetWaitInfo"] = WaitDT;
                        HttpRuntime.Cache["GetIceBoxGetWaitInfo_Time"] = DateTime.Now;
                        //LogManager.WriteLog("aaaa", "更新缓存");
                    }
                    else
                    {
                        WaitDT = HttpRuntime.Cache["GetIceBoxGetWaitInfo"] as DataTable;
                    }
                }
                else
                {
                    WaitDT = commBB.Query(waitSql).Tables[0];
                    HttpRuntime.Cache["GetIceBoxGetWaitInfo"] = WaitDT;
                    HttpRuntime.Cache["GetIceBoxGetWaitInfo_Time"] = DateTime.Now;
                    //LogManager.WriteLog("aaaa", "初始化");
                }
 

                string rst = "";
                if (WaitDT.Rows.Count == 0)
                {
                    rst = "0";
                }
                else
                {
                    //先将dt中的数据按照条件查出来()
                    DataRow[] drs = WaitDT.Select("corpId =" + corpId);
                    //必须要重新new一个dt来赋值,参照下面代码,否则会报错!!!
                    DataTable newDt = WaitDT.Clone(); //克隆结构
                    //如果不需要克隆整个dt,则需要重新new一个dt,然后添加列,参照下面两行
                    //DataTable newDt = new DataTable(); //dtRegister.Clone(); //克隆结构
                    //newDt.Columns.Add("content", Type.GetType("System.String"));
                    drs.ToList<DataRow>().ForEach((r) => newDt.ImportRow(r));

                    if (newDt.Rows.Count > 0)
                    {
                        rst = newDt.Rows[0]["waitAmount"].ToString();
                    }
                    else
                    {
                        rst = "0";
                    }
                }
                 
                return rst;
            }
            catch (Exception ex)
            {

                return "0";
            }
            finally
            {
                commBB.Dispose();
            }
        }

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值