成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何不使用數據庫緩存,還達到實時更新

運維 數據庫運維
不使用緩存,更新耗時,效率低,作者又不希望使用依賴項。那么如何能在不使用數據庫緩存依賴項,又能達到實時更新的效果呢?請看下文...

先說下當前項目的場景:

后臺人員1天不定時的,添加新聞和視頻圖片10條左右,數量不多

不使用緩存,回和數據庫打交道,非常耗時,造成效率低,尤其是在數據量非常龐大的情況下

可是加了緩存,加多少時間的緩存?新聞要保證實時更新,一發布立刻顯示出來

微軟給出了解決方法,數據庫緩存依賴項,但是貌似只能用在SQL上,而且要配置些東西;

還有,并不透明~ 一些東西看不到

這里提供另一種方法:

先說下大概思路,在所有查找操作時,都把結果插入 cache 在對數據庫有操作時(增刪改) 刪除cache

有了思路,開始解決問題,這里會遇到兩個問題

*** : 所有查找時,cache建怎么定義,保證不重復呢

第二:微軟沒有提供刪除所有cache的方法,只有cache["鍵值名"].Remove(); 而沒有removeall();

下面上代碼和解決辦法 以及思路

  1. #region##根據條件得到新聞  
  2.      /// <summary>  
  3.      /// 根據條件得到新聞  
  4.      /// </summary>  
  5.      /// <param name="tableName"></param>  
  6.      /// <param name="whereStr"></param>  
  7.      /// <param name="topCount"></param>  
  8.      /// <returns></returns>  
  9.      public List<CmsDemoModels.NewsInfo> GetByCondition(string whereStr, string topCount)  
  10.      {  
  11.          string cacheKey = string.Format("{0}.{1}.{2}", GetType(), "GetByCondition",whereStr+topCount);  
  12.          if (HttpRuntime.Cache[cacheKey] != null)  
  13.          {  
  14.              return HttpRuntime.Cache[cacheKey] as List<CmsDemoModels.NewsInfo>;  
  15.          }  
  16.          else 
  17.          {  
  18.              //從數據庫里查找并插入緩存  
  19.              using (CmsDemoDAL.NewsInfoServcie ns = new NewsInfoServcie())  
  20.              {  
  21.                  List<NewsInfo> newsList=ns.GetByCondition(whereStr, topCount);  
  22.                  HttpRuntime.Cache.Insert(cacheKey,newsList, null, DateTime.Now.AddDays(1), TimeSpan.Zero);  
  23.                  return newsList;  
  24.              }  
  25.          }  
  26.      } 

看上面的代碼

  1. string cacheKey = string.Format("{0}.{1}.{2}", GetType(), "GetByCondition",whereStr+topCount); 

我定義這緩存鍵值不重復的方法是,用當前類+方法名+所有參數名的組合,來保證***性這樣把所有查詢的方法 以及查詢結果都緩存起來了~

  1. public static void ClearOutputCache()  
  2.     {  
  3.         //移除自定義緩存  
  4.         foreach (var item in HttpRuntime.Cache.Cast<DictionaryEntry>().ToArray())  
  5.         {  
  6.             HttpRuntime.Cache.Remove((string)item.Key);  
  7.         }  
  8.    }  

上面的方法,是刪除所有緩存

可是又有個問題,我們有視頻表、圖片表、新聞等等,我現在更新個新聞,就要刪除所有的緩存,其實只用刪除所有新聞的緩存就行了

  1. #region 刪除緩存  
  2.  
  3.  /// <summary>  
  4.  /// 根據名字開頭刪除緩存  
  5.  /// </summary>  
  6.  /// <param name="StartName">緩存名字開頭</param>  
  7.  public void RemoveAllCache(string StartName)  
  8.  {  
  9.      //移除自定義應用程序緩存  
  10.      DictionaryEntry[] de = HttpRuntime.Cache.Cast<DictionaryEntry>().ToArray();  
  11.      foreach (var item in de)  
  12.      {  
  13.          string cacheKey = item.Key.ToString();  
  14.          if (cacheKey.StartsWith(StartName))  
  15.          {  
  16.              HttpRuntime.Cache.Remove((string)item.Key);  
  17.          }  
  18.      }  
  19.  }  
  20.  
  21.  #endregion 

稍微改進下 效率又大大的提高了

當我們數據庫有變化時,比如添加了個新聞調用

  1. p.RemoveAllCache(GetType().ToString()); 
  1. #region##添加新聞  
  2.      /// <summary>  
  3.      /// 添加新聞  
  4.      /// </summary>  
  5.      /// <param name="info"></param>  
  6.      /// <returns></returns>  
  7.      public int Add(CmsDemoModels.NewsInfo info)  
  8.      {  
  9.  
  10.          using (CmsDemoDAL.NewsInfoServcie ns = new NewsInfoServcie())  
  11.          {  
  12.              info.ViewCount = 0;  
  13.              info.State = 0;  
  14.              info.SortIndex = GetMaxSort() + 1;  
  15.              int i= ns.Add(info);  
  16.              PubClass p = new PubClass();  
  17.              p.RemoveAllCache(GetType().ToString());  
  18.              return i;  
  19.          }  
  20.      }  
  21.      #endregion 

這樣就把所有以GetType().ToString() 開頭的刪除掉了~~ 實現新聞的刪除新聞的,視頻的刪除視頻的

PS: 這里新聞添加和查找都是在BLL層下的NewInfoManager類下,所以他們的 GetType().ToString() 會一樣大概思路就這樣

有什么問題,可以留言交流,歡迎討論~

原文鏈接:http://www.cnblogs.com/wlflovenet/archive/2011/06/30/Cache.html

【編輯推薦】

  1. 關于商城系統中商品類別的設計
  2. 關于商城系統中商品類別的設計(續篇)
  3. 數據庫是怎么進行壓縮的?
  4. 知道數據庫設計的三大范式嗎
  5. 數據庫應用呈三大趨勢 DBA要如何應對

 

責任編輯:艾婧 來源: wlf的博客
相關推薦

2014-12-22 09:48:58

DBCAOracle 11

2024-12-16 08:01:57

2022-04-14 09:00:00

開發數據庫工具

2021-02-05 14:40:56

overflow: h代碼前端

2010-05-13 11:45:56

MySQL數據庫

2021-03-19 07:40:22

緩存數據庫日志

2018-03-28 09:26:43

數據庫緩存層優化

2025-06-12 09:16:54

2010-06-10 10:50:17

MySQL數據庫

2021-01-13 05:23:27

緩存數據庫高并發

2011-03-02 13:54:39

MySQL數據庫

2017-05-25 08:52:08

SQL Server數據庫

2015-04-22 14:41:04

云遷移Redis緩存數據模型調整

2025-05-22 07:17:09

2024-01-09 16:02:11

數據庫流服務大數據

2009-03-19 10:08:09

C#數據庫查詢

2019-07-11 08:45:00

MySQL數據庫緩存

2019-10-08 15:54:42

SQL數據庫技術

2011-06-07 17:01:44

2011-07-28 17:02:59

MYSQL數據庫跨表更新數據并合
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜三区 | 亚洲一区二区av | 草久视频 | 欧美精品一区二区在线观看 | 亚洲网站观看 | 欧美一级欧美一级在线播放 | 区一区二区三在线观看 | 国产91精品久久久久久久网曝门 | 日韩精品一区二区三区中文在线 | 色免费在线视频 | 亚洲精品aⅴ | 亚洲香蕉在线视频 | 日日夜夜精品视频 | 久草新在线 | 五月天天丁香婷婷在线中 | 日韩三区在线观看 | 日韩欧美亚洲 | 欧美福利在线 | 精品乱码一区二区三四区视频 | 亚洲成人av在线播放 | 香蕉久久av | av免费网址| 成人在线视频一区二区三区 | 涩涩视频在线观看 | 欧美日韩亚洲一区 | 亚洲三级在线观看 | 精品久久99| 日韩欧美亚洲 | 欧美激情视频一区二区三区在线播放 | 欧美综合国产精品久久丁香 | 一区二区精品 | 国产综合久久 | 亚洲欧美在线观看视频 | 岛国av在线免费观看 | 国产aⅴ爽av久久久久久久 | 日本在线黄色 | 成人在线精品视频 | 成人av免费 | 久久亚洲综合 | 一区二区精品 | 成人黄色电影在线观看 |