程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 無縫的緩存讀取:雙存儲緩存策略

無縫的緩存讀取:雙存儲緩存策略

編輯:關於ASP.NET

最近在做一個WEB的數據統計的優化,但是由於數據量大,執行一次SQL統計要 比較長的時間(一般700ms算是正常)。

正常的做法只要加個緩存就好了。

但是同時業務要求此數據最多1分鐘就要更新,而且這一分種內數據可能會有 較多變化(而且原系統不太易擴展)。

也就是說緩存1分鐘就要失效重新統計,而且用戶訪問這頁還很是頻繁,如果 使用一般緩存那麼用戶體驗很差而且很容易造成超時。

看到以上需求,第一個進入我大腦的就是從前做游戲時接觸到的DDraw的雙緩 沖顯示方式。

在第一幀顯示的同時,正在計算第二幀,這樣讀取和計算就可以分開了,也就 避免了讀取時計算,提高了用戶體驗。

我想當然我們也可以將這種方式用於緩存的策略中,但這樣用空間換取時間的 方式還是得權衡的,因為並不是所有時候都值得這麼做,但這裡我覺得這樣做應 該是最好的方式了。

注:為了可以好好演示,本篇中的緩存都以IEnumerable的形式來存儲,當然 這個文中原理也可以應用在WebCache中。

這裡我使用以下數據結構做為存儲單元:

namespace CHCache {
  /// <summary>
  /// 緩存介質
  /// </summary>
  public class Medium {
    /// <summary>
    /// 主要存儲介質
    /// </summary>
    public object Primary { get; set; }
    /// <summary>
    /// 次要存儲介質
    /// </summary>
    public object Secondary { get; set; }
    /// <summary>
    /// 是否正在使用主要存儲
    /// </summary>
    public bool IsPrimary { get; set; }
    /// <summary>
    /// 是否正在更新
    /// </summary>
    public bool IsUpdating { get; set; }
    /// <summary>
    /// 是否更新完成
    /// </summary>
    public bool IsUpdated { get; set; }
  }
}

有了這個數據結構我們就可以將數據實現兩份存儲。再利用一些讀寫策略就可 以實現上面我們講的緩存方式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved