c#中的Cache緩存技術

来源:https://www.cnblogs.com/xianyv/archive/2019/04/27/10682438.html
-Advertisement-
Play Games

1、HttpRuntime.Cache 相當於就是一個緩存具體實現類,這個類雖然被放在了 System.Web 命名空間下了。但是非 Web 應用也是可以拿來用的。 2、HttpContext.Cache 是對上述緩存類的封裝,由於封裝到了 HttpContext ,局限於只能在知道 HttpCon ...


1、HttpRuntime.Cache 相當於就是一個緩存具體實現類,這個類雖然被放在了 System.Web 命名空間下了。但是非 Web 應用也是可以拿來用的。

2、HttpContext.Cache 是對上述緩存類的封裝,由於封裝到了 HttpContext ,局限於只能在知道 HttpContext 下使用,即只能用於 Web 應用。

綜上所屬,在可以的條件,儘量用 HttpRuntime.Cache ,而不是用 HttpContext.Cache 。 

Cache有以下幾條緩存數據的規則。
第一,數據可能會被頻繁的被使用,這種數據可以緩存。
第二,數據的訪問頻率非常高,或者一個數據的訪問頻率不高,但是它的生存周期很長,這樣的數據最好也緩存起來。
第三是一個常常被忽略的問題,有時候我們緩存了太多數據,通常在一臺X86的機子上,如果你要緩存的數據超過800M的話,就會出現記憶體溢出的錯誤。所以說緩存是有限的。換名話說,你應該估計緩存集的大小,把緩存集的大小限制在10以內,否則它可能會出問題。

1.cache的創建
   cache.Insert(string key,object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration)//只介紹有5個參數的情況,其實cache里有很幾種重載
參數一:引用該對象的緩存鍵
參數二:要插入緩存中的對象
參數三:緩存鍵的依賴項,當任何依賴項更改時,該對象即無效,並從緩存中移除。 null.">如果沒有依賴項,則此參數包含 null。
參數四:設置緩存過期時間
參數五:參數四的依賴項,如果使用絕對到期,null.">slidingExpiration parameter must beNoSlidingExpiration.">則 slidingExpiration 參數必須為 
NoSlidingExpiration

2.銷毀cache
cache.Remove(string key)//key為緩存鍵,通過緩存鍵進行銷毀
3.調用cache
例如你存的是一個DataTable對象,調用如下: DataTable finaltable = Cache["dt"] as DataTable;
4.一般什麼時候選用cache
cache一般用於數據較固定,訪問較頻繁的地方,例如在前端進行分頁的時候,初始化把數據放入緩存中,然後每次分頁都從緩存中取數據,這樣減少了連接資料庫的次數,提高了系統的性能。

    /// <summary>  
    /// 獲取數據緩存  
    /// </summary>  
    /// <param name="cacheKey"></param>  
    public static object GetCache(string cacheKey)  
    {  
        var objCache = HttpRuntime.Cache.Get(cacheKey);  
        return objCache;  
    }  
    /// <summary>  
    /// 設置數據緩存  
    /// </summary>  
    public static void SetCache(string cacheKey, object objObject)  
    {  
        var objCache = HttpRuntime.Cache;  
        objCache.Insert(cacheKey, objObject);  
    }  
    /// <summary>  
    /// 設置數據緩存  
    /// </summary>  
    public static void SetCache(string cacheKey, object objObject, int timeout = 7200)  
    {  
        try  
        {  
            if (objObject == null) return;  
            var objCache = HttpRuntime.Cache;  
            //相對過期  
            //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);  
            //絕對過期時間  
            objCache.Insert(cacheKey, objObject, null, DateTime.Now.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null);  
        }  
        catch (Exception)  
        {  
            //throw;  
        }  
    }  
    /// <summary>  
    /// 移除指定數據緩存  
    /// </summary>  
    public static void RemoveAllCache(string cacheKey)  
    {  
        var cache = HttpRuntime.Cache;  
        cache.Remove(cacheKey);  
    }  
    /// <summary>  
    /// 移除全部緩存  
    /// </summary>  
    public static void RemoveAllCache()  
    {  
        var cache = HttpRuntime.Cache;  
        var cacheEnum = cache.GetEnumerator();  
        while (cacheEnum.MoveNext())  
        {  
            cache.Remove(cacheEnum.Key.ToString());  
        }  
    }  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python基礎之列表的知識,包括列表初識,列表常用方法及列表其他擴展。列表初識包括 列表的作用和定義,列表存儲和取數據;列表方法 包括列表方法查看,列表常用方法統計,列表取值和取索引,列表 修改,列表增加,列表刪除數據,del關鍵字刪除,列表統計,列表的升降序和逆序;列表其他擴展 包括 關鍵字,函... ...
  • 一、感慨 很久前看到一篇博客中有句話大致的意思是:“asp.net 程式性能低下的主要原因是開發人員技術參差不齊”,當時看到這句話不以為然,然而時間過的越久接觸的.net 開發人員越多就越認同這句話;特別最近發現非常一個成熟的項目中有些問題非常非常影響性能,最終影響的是用戶體驗,藉此給大家分享一下關 ...
  • 今天剛看到老張的哲學博客關於AutoMapper的教程,從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 對象映射使用,項目部署Windows+Linux完整版, 看得我有點暈,我搞不得那個CustomProfile跟AutoMapperProfile是乾 ...
  • 問題描述 C# 桌面程式開發中,經常遇到的一個問題就是窗體閃爍,這與窗體繪製有關。像這種不屬於業務邏輯問題的頑疾,解決起來很是麻煩,這裡將給出一個解決方法幫助桌面程式員。雖然沒有真正從窗體繪製的層面讓窗體不閃爍,但用起來確實覺得有效好用。 解決方法 在窗體載入之前,設置為透明窗體,併在窗體真正顯示時 ...
  • 您的身份伺服器只是一個標準的ASP.NET Core應用程式,包括IdentityServer中間件。首先閱讀有關發佈和部署的官方Microsoft "文檔" (尤其是有關負載平衡器和代理的 "部分" )。 30.1 典型架構 通常,您將設計IdentityServer部署以實現高可用性: Iden ...
  • IdentityServer 預設以 "JWT" (JSON Web令牌)格式發出訪問令牌。 今天的每個相關平臺都支持驗證JWT令牌, "這裡" 可以找到一個很好的JWT庫列表。熱門庫例如: ASP.NET Core的 "JWT bearer authentication handler" Kata ...
  • 在授權請求期間,如果IdentityServer需要用戶同意,則瀏覽器將被重定向到同意頁面。 同意用於允許最終用戶授予客戶端對資源(身份或API)的訪問許可權。這通常僅對第三方客戶端是必需的,並且可以在客戶端設置上按客戶端啟用/禁用。 28.1 確認頁 為了讓用戶同意,托管應用程式必須提供同意頁面。該 ...
  • 前言 在.Net程式開發過程中,我們經常會遇到如下場景: 編寫WinForm程式客戶端,需要查詢資料庫獲取數據,於是我們根據需求寫好了代碼後,點擊查詢,發現界面卡死,無法響應。經過調試,發現查詢資料庫這一步執行了很久,在此過程中,UI被阻塞,無法響應任何操作。 如何解決此問題?我們需要分析問題成因: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...