1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ASP.NET Core中的內(nèi)存緩存

        共 5630字,需瀏覽 12分鐘

         ·

        2020-11-20 00:40


        ASP.NET Core中的內(nèi)存中緩存

        讓我們看看如何通過緩存優(yōu)化ASP.NET Core應用程序性能

        我相信,在我們的工作中,每個人都收到來自客戶的請求或來自我們應用程序用戶的反饋,以提高響應速度。

        如果在編寫代碼時僅使用最佳實踐還不夠,那么我們肯定需要使用緩存來微調(diào)我們的應用程序。

        緩存包括將那些不經(jīng)常更改的信息存儲在某個地方。高頻訪問是我們應用程序的業(yè)務要求。

        在本文中,我們將看到ASP.NET Core可用于緩存的內(nèi)容。

        IMemoryCache和IDistributedCache

        這兩個接口代表.NET Core中用于緩存的內(nèi)置機制。您可能已經(jīng)聽說過的所有其他技術都是這兩個接口的實現(xiàn)。在本文中,我們將詳細介紹內(nèi)存緩存,而在以后的文章中將研究分布式緩存。

        在ASP.NET Core中啟用內(nèi)存中緩存

        我們可以使用ConfigureServices方法將ASP.NET內(nèi)存中緩存合并到應用程序中。您可以在Startup類中啟用MemoryCache,如下面的代碼片段所示。

        public void ConfigureServices(IServiceCollection services){    services.AddMvc();    services.AddMemoryCache();}

        AddMemoryCache方法允許我們注冊IMemoryCache接口,如上面提到的,將被用于高速緩存的基礎。下面我們看到框架中接口的定義:

        public interface IMemoryCache : IDisposable{    bool TryGetValue(object key, out object value);    ICacheEntry CreateEntry(object key);    void Remove(object key);}

        接口中提供的方法并不是唯一可用于緩存的方法:我們將在后面看到,存在各種擴展來豐富可用的API并極大地促進其使用。例如:

        public static class CacheExtensions{    public static TItem Get(this IMemoryCache cache, object key);
        public static TItem Set(this IMemoryCache cache, object key, TItem value, MemoryCacheEntryOptions options);
        public static bool TryGetValue(this IMemoryCache cache, object key, out TItem value); ...}

        注冊后,該接口可以注入到我們要使用它的類構造函數(shù)中,如下所示:

        private IMemoryCache cache;public MyCacheController(IMemoryCache cache)    {        this.cache = cache;    }

        在下面的部分中,我們將研究如何在ASP.NET Core中使用緩存API來存儲和檢索對象。

        使用IMemoryCache存儲和檢索項目

        要使用IMemoryCache接口寫入對象,請使用Set ()方法,如以下代碼片段所示。

        [HttpGet]public string Get(){    cache.Set(“MyKey”, DateTime.Now.ToString());    returnThis is a test method...”;}

        此方法接受兩個參數(shù),第一個是鍵,用于標識緩存的對象,第二個參數(shù)是我們要存儲的值。要從緩存中檢索對象,請使用Get ()方法,如下面的代碼片段所示。

        [HttpGet(“{key}”)]public string Get(string key){    return cache.Get(key);}

        如果我們不確定緩存中是否存在特定的密鑰,則可以使用TryGetValue()方法進行幫助:它返回一個布爾值,指示所請求的密鑰存在或不存在。

        下面是如何使用TryGetValue修改Get()方法的方法。

        [HttpGet(“{key}”)]public string Get(string key){    string obj;    if (!cache.TryGetValue(key, out obj))
        obj = DateTime.Now.ToString(); cache.Set(key, obj);
        return obj;}

        可用的另一種方法是GetOrCreate()方法,該方法驗證所需密鑰的存在,否則,該方法將為您創(chuàng)建它。

        [HttpGet(“{key}”)]public string Get(string key){    return cache.GetOrCreate(“key”,        cacheEntry => {            return DateTime.Now.ToString();        });}

        如何在ASP.NET Core中的緩存數(shù)據(jù)上設置過期策略

        當我們使用IMemoryCache存儲對象時,MemoryCacheEntryOptions類為我們提供了各種技術來管理緩存數(shù)據(jù)的到期時間。

        我們可以指定一個固定的時間,在該時間之后某個特定的密鑰將過期(絕對過期),或者如果在某個特定的時間(滑動過期)之后沒有訪問它,則它可以過期。此外,還可以使用Expiration Token在緩存的對象之間創(chuàng)建依賴關系。這里有一些例子

        //absolute expiration using TimeSpan_cache.Set("key", item, TimeSpan.FromDays(1));
        //absolute expiration using DateTime_cache.Set("key", item, new DateTime(2020, 1, 1));
        //sliding expiration (evict if not accessed for 7 days)_cache.Set("key", item, new MemoryCacheEntryOptions{ SlidingExpiration = TimeSpan.FromDays(7)});
        //use both absolute and sliding expiration_cache.Set("key", item, new MemoryCacheEntryOptions{ AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(30), SlidingExpiration = TimeSpan.FromDays(7)})
        // This method adds a trigger to refresh the data from backgroundprivate void UpdateReset(){ var mo = new MemoryCacheEntryOptions(); mo.RegisterPostEvictionCallback(RefreshAllPlacessCache_PostEvictionCallback); mo.AddExpirationToken(new CancellationChangeToken(new CancellationTokenSource(TimeSpan.FromMinutes(35)).Token)); Cache.Set(CACHE_KEY_PLACES_RESET, DateTime.Now, mo);}
        // Method triggered by the cancellation token that triggers the PostEvictionCallBackprivate async void RefreshAllPlacesCache_PostEvictionCallback(object key, object value, EvictionReason reason, object state){ // Regenerate a set of updated data var places = await GetLongGeneratingData(); Cache.Set(CACHE_KEY_PLACES, places, TimeSpan.FromMinutes(40));
        // Re-set the cache to be reloaded in 35min UpdateReset();}

        緩存回調(diào)

        MemoryCacheEntryOptions類提供的另一個有趣功能是允許我們注冊回調(diào)的功能,當從緩存中刪除一項時將執(zhí)行該回調(diào)。

        MemoryCacheEntryOptions cacheOption = new MemoryCacheEntryOptions()  {      AbsoluteExpirationRelativeToNow = (DateTime.Now.AddMinutes(1) - DateTime.Now),  };  cacheOption.RegisterPostEvictionCallback(      (key, value, reason, substate) =>      {          Console.Write("Cache expired!");      }); 

        緩存標簽助手

        到目前為止,我們已經(jīng)看到.NET Core提供的API的使用,從而能夠直接使用IMemoryCache接口手動在緩存中寫入和讀取項目。此接口還有其他實現(xiàn),可能非常有用。例如,在Web環(huán)境中,如果我們使用.NET Core MVC框架,則可以使用helper cache tag存儲部分頁面。它非常簡單易用:您可以將視圖的一部分包裝在緩存標簽中以啟用緩存:

        Ora: @DateTime.Now

        對于頁面的每個后續(xù)請求(包含此標記),將從緩存中使用該段的正文。如果將其放在頁面上并觀察其輸出,則可以輕松檢查行為。當然,我們使用它的方式僅出于示例目的,但是當您嘗試渲染需要大量資源的頁面時,您可以欣賞它的功能。一個明顯的緩存候選是視圖組件[1]調(diào)用

         expires-on="@TimeSpan.FromSeconds(600)">@await Component.InvokeAsync("BlogPosts", new { tag = "popular" })

        在上一個代碼段中,您還可以通過屬性expires-on來了解如何管理緩存中對象的過期期限。還有其他兩種選擇:

        ?過期時間:將使用TimeSpan進行評估以指示一段時間,此后必須重新生成內(nèi)容;?過期滑動:還應使用指示閑置時間的TimeSpan。每次從緩存中讀取內(nèi)容時,都會將其刪除延遲。

        另一個可定制方面涉及配置緩存標準的可能性。我們可能需要根據(jù)一些變量來更新緩存的對象。一些要求是由覆蓋變化經(jīng)過下列屬性:

        ?按路由變化:通過路由參數(shù)的名稱(例如id)進行了增強,以指示在指示的屬性更改時必須重新生成內(nèi)容;?因查詢而異:當更改查詢字符串鍵時,將生成并緩存內(nèi)容;?按用戶不同:當我們顯示已登錄用戶的特定數(shù)據(jù)時(例如,包含名稱和照片的個人資料框),必須將其設置為true;?按標題變化:如果我們使用HTTP請求標頭顯示語言內(nèi)容,則根據(jù)HTTP請求標頭來更改緩存,例如“ Accept-Language”。?cookie-variable-by-cookie:允許您根據(jù)cookie的內(nèi)容更改緩存,我們必須指出其名稱。

        可以使用一個或多個按屬性的屬性來執(zhí)行高級緩存策略,但是,有句著名的名言:“功能強大,責任重大”。

        結論

        使用內(nèi)存緩存可以使您將數(shù)據(jù)存儲在服務器的內(nèi)存中,并通過刪除對外部數(shù)據(jù)源的不必要請求來幫助我們提高應用程序性能。如我們所見,它非常易于使用。

        我提醒您,當您的應用程序托管在多臺服務器或云托管環(huán)境中時,不能使用這種方法。在下一篇文章中,我們將討論分布式緩存。

        下次見!

        References

        [1]?組件:?https://www.blexin.com/en-US/Article/Blog/Kestrel-build-me-up-31



        往期精彩回顧




        【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程?★★★

        .NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

        【.NET Core微服務實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引

        Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

        .NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

        10個小技巧助您寫出高性能的ASP.NET Core代碼

        用abp vNext快速開發(fā)Quartz.NET定時任務管理界面

        在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務輕松實現(xiàn)作業(yè)調(diào)度

        現(xiàn)身說法:實際業(yè)務出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

        關于C#異步編程你應該了解的幾點建議

        C#異步編程看這篇就夠了


        瀏覽 43
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            五月婷久久| 成年片免费观看网站免费观看,亚洲+欧... | 美女性爱3P视频| 国产欧美一区二区人妻喷水| 亚洲AV无码第一区二区三区蜜桃 | 在线观看国产视频| 成人h在线| 操老女人视频| 又a又黄高清无码视频| 亚洲熟女一区二区三区妖精| 亚洲精品国产精品乱玛不99 | 中文字幕视频一区| 最近中文字幕高清2019中文字幕| 国产午夜视频在线观看| 国产一级a毛一级a| 国产欧美一区在线看| 精品久久免费| 一级a一级a爱片兔兔软件| 少妇搡BBBB搡BBB搡造水多,| 最近中文字幕无码| 国产精品久久久久久久9999 | 色综合天| 中文字幕内射| 无码123区| 日韩黄色无码视频| 懂色av,蜜臀AV粉嫩av| 超碰久热| 亚洲性爱视屏| 日韩不卡免费| 蜜臀av网站| 国产精品秘ThePorn| 欧美亚洲自拍偷拍| 天天日天天射天天操| 豆花视频成人| 国产精品福利在线观看| 牛牛精品视频一区二区| 国产精品一卡二卡三卡| 阿v视频在线观看| 久久国产精品免费视频| 2025av天堂网| 91av成人| 亚洲天堂2017| 天天做| 性爱无码AV| 欧美成人精品激情在线观看| 黄片视频在线| 欧美在线小视频| 国产成人精品免费视频| 九九九亚洲| 青草中文娱乐网在线| 91AV免费看| 国产在线看| 亚洲女人视频| 五月婷视频| 天堂va欧美va亚洲va在线 | 成人黄片在线免费观看| 五月激情婷婷网| 亚洲第一视频在线观看| 在线有区别亚洲| 综合一区二区三区| 不卡av在线| 三级片网站大全| 做爱网站| 国产一级A片视频| 国产精品久久久久久婷婷天堂 | 91狠狠综合久久| 就去色色五月天| 亚洲av网站在线观看| 簧片在线免费观看| 先锋影音av在线| 国产欧美一区二区三区视频| 国产影视av| 97中文字幕在线| 99成人国产精品视频| 91中文字幕| 我要看黄色一级片| 亚洲成人视频免费在线观看| 日韩人妻精品无码制服| 人人操人人爱人人拍| 亚洲福利在线免费观看| A片免费观看视频| wwwAV| 91在线精品秘一区二区黄瓜| 青草香蕉视频| 波多野结衣大战黑人| 午夜成人免费视频| 中文字幕你懂的在线三级| 91人人妻人人澡人人爽人人精品| 免费在线观看黄色片| 殴美老妇BBBBBBBBB| 国产精品精品| 狠狠操天天干| 1024在线视频| 北条麻妃视频| 色视频网| 凹凸熟女凹凸BBWBBW| 成人久久| 五月天激情av| 伊人一区二区三区| 日韩高清国产一区在线| 丁香婷婷网| 97精品人人妻人人| 大香蕉婷婷| www.午夜福利| 黑人大荫蒂女同互磨| 久久精品电影| 国产1级片| 欧美污网站| brazzers疯狂作爱| 高清无码不卡在线观看| 91资源在线| 电家庭影院午夜| 国产AV小电影| 久久久久亚洲| 波多野结衣久久精品| 中文在线观看视频| 欧美成人一区二区三区片| 人人看人人色| 有码中文字幕| 久久av影院| 性爱二区| 欧美视频A| 日韩无码影视| 日本少妇视频| 人人干人人妻| 国产精品性爱| 起碰视频| 女同久久另类99精品国产91| 99热最新网址| 狠狠色av| 免费一级做a爱片毛片A片小说 | 最近日韩中文字幕中文翻译歌词| 先锋资源久久| 国产三级片在线视频| 天天操大香蕉| 俺来也俺也啪WWW色| 日韩大黄| 精品成人AV| 日韩无码网址| 国产精品女人777777| 中文无码在线视频| 成人无码99| 无码视频一区二区三区| 中国熟女视频| 高清无码做爱视频| 国产成人高清在线| 超碰久操| 狠狠AV| 杨贵妃一级婬片90分钟| 人人干人人操人人爽| 操屄小视频| 国产做受精品网站在线观看| 青娱乐在线视频精品| 欧美一在线一综合| 黑人猛躁白人BBBBBBBBB| 国产精品久久AV电影| 三级AV网站| 无码人妻日韩精品一区二区三| 伊人大香焦网| 黄色A级毛片| 看一级黄色视频| 99久久99| 国产丝袜自拍| 天天搞天天曰在线观看| 成人黄色视频网站在线观看| 777免费观看成人电影视频 | 青娱乐日韩| 国精产品秘一区二区-| 久久公开视频| 欧美五月在线网址| 操逼视频欧美| 日韩电影免费在线观看| www.亚洲精品| 天堂AV无码AV| 国产黄色网| 国产精品天天狠天天看| 婷婷色综合视频二区| 操逼视频欧美| 亚洲日韩精品在线视频| 成人爽a毛片一区二区免费| 六十路老熟女码视频| 国产免费久久| 91亚洲精品国偷拍自产在线观看 | 日韩性爱网| 开心五月激情网| 国产无码成人电影| 中文字幕在线观看不卡| 国产一级A片免费播放| 中韩无码| 免费在线观看黄片视频| 做爱激情视频网站| 亚洲无码在线免费视频| 91香蕉网站| 少妇视频| 久久播视频| 天天摸天天添| 午夜性福利| 91人妻人人澡人人爽人人玩| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 亚洲视频综合| 在线欧美日韩| 亚洲性爱手机版| 亚洲一区二区三区在线| 国产亲子乱婬一级A片借种| 就去se超碰| 人妻天天爽| 五月天婷婷网址| 91就要爱爱视频| 成人在线免费网站| 久久婷婷五月丁香| 北条麻妃视频| 黄片在线免费观看视频| 蜜臀久久精品久久久久| 国产在线观看免费成人视频 | 国产一级麻豆| 中国操B视频| 久久久国产视频| 国产在线视频一区| 国产成人777777精品综合| A片观看视频| 北条麻妃被操| 黑人精品| 嫩BBB搡BBBB搡BBBB| 无码电影网| 色情片在线观看| 欧美极品少妇| 亚洲精品一区二区三区蜜桃| 亚洲精品婷婷| 制服无码| 一区二区av在线| 91无码| 亚洲AV无码电影| 国产人妻精品一二三区| 一本色道久久88亚洲精品综合| 2025精品偷拍视频| 欧美亚洲日韩中文字幕| 免费黄色福利视频| 久了中文字幕| 欧美午夜精品| 北京熟妇槡BBBB槡BBBB| 成人做爰黄A片免费看| 草逼免费看| 亚洲日韩在线播放| 九九热免费视频| 麻豆一区在线观看| 九九成人精品| 欧美一区二区丁香五月天激情| 国产激情精品| 日韩精品一区二区三区中文在线 | 69式荫蒂被添全过程频| 一区二区有限公司| 欧美在线A| 成人二区三区| 日韩精品三区| 久久嫩草精品久久久久| 婷婷天堂网| 青春草在线播放| 久久艹精品视频| 欧美午夜精品久久久| 国产久久这里只有精品视频| 欧美性猛交XXXX乱大交| 国产毛片一区| 亚洲成人影音先锋| 51一区二区三区| 日韩码线观看视频| 麻豆视频在线观看| 国产精品国产精品国产专区| 中文在线免费看视频| 欧美不卡一区二区| 国产精品色色色| 免费一级婬片AAA片毛片A级| 亚洲无码在线免费观看| 国产精品成人午夜福利| 国产日韩在线观看视频| 免费看黄色的视频| 97超碰成人| 11一12周岁女毛片| AV资源网站在线| 伊人春色AV| 亚洲成人无码视频| 中文字幕第八页| 丰满少妇一区二区三区| 成年人视频在线免费观看| 9久9久9久9久女女女女| jlzz18| 亚洲射射| v天堂在线观看| AV一二区| 色欧美大香蕉| 欧美一级在线观看| 激情黄色五月天| 中文丰满亲子伦| 蜜桃秘av一区二区三区安全| 日韩av免费看| 国产成人性爱| 欧美日日干| 成人网址大全| 狠狠地日| 日韩动态视频| 国产三级精品三级在线观看|