日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

用分布式缓存提升ASP.NET Core性能

發布時間:2023/12/4 asp.net 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用分布式缓存提升ASP.NET Core性能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

得益于純凈、輕量化并且跨平臺支持的特性,ASP.NET Core作為熱門Web應用開發框架,其高性能傳輸和負載均衡的支持已廣受青睞。實際上,10-20臺Web服務器還是輕松駕馭的。有了多服務器負載的支持,使得Web應用層在業務增長時隨時采用水平擴展,ASP.NET Core也能夠沒有什么負擔地處理長事務。然而造成性能瓶頸的地方仍然不可忽視,具體來說首當其沖就是數據存儲,無法隨著應用層的性能提升而提高大規模數據處理能力,這是因為數據層是沒有辦法簡單通過增加服務器得到改善的。

ASP.NET Core應用有兩類數據在數據存儲成為瓶頸時突顯出來:

  • 數據庫

  • Session會話

  • 解決方案: 分布式緩存


    解決這個性能瓶頸,不妨試試NCache,它是一個開源的支持.NET的分布式緩存,它的優勢在于完全基于內存,所以你可以在業務增長時組建內存服務器的集群來實現線性擴展,相比于數據庫能節省近八成的成本,并且在讀寫應用數據上得到更快的體驗。NCache很適合存儲session會話,在多Web服務器負載時也解決了會話保持的需求。

    下圖是NCache這類常見的分布式緩存的部署架構。

    ASP.NET Core應用數據緩存IDistributedCache


    在ASP.NET Core之前,舊的ASP.NET程序的緩存對象是獨立進程的,也沒有多服務器支持的需要?,F今ASP.NET Core推出了IDistributedCache統一接口,定義了分布式緩存的基本接口,類似于日志、注入容器的接口一樣,可以無縫提供第三方擴展。

    IDistributedCache接口使用示例:

    IDistributedCache _cache;

    ...

    private byte[] LoadCustomer(string custId) {

    ? ? string key = "Customers:CustomerID:" + custId;

    ? ? // is the customer in the cache?

    ? ? byte[] customer = _cache.Get(key);

    ?

    ? ? if(customer == null) {

    ? ? ? ?// the cache doesn't have it. so load from DB

    ? ? ? ?customer = LoadFromDB(key);

    ? ? ? ?// And, cache it for next time

    ? ? ? ?_cache.Set(key, customer);

    ? ? }

    ?

    ? ? return customer;

    }

    NCache是IDistributedCache的一種實現,所以在ASP.NET Cor應用中使用NCache不需要特殊的配置。

    以下是IDistributedCache接口的定義(注意每個方法都有對應的Async版本的重載)。

    namespace Microsoft.Extensions.Caching.Distributed

    {

    ? ? public interface IDistributedCache

    ? ? {

    ? ? ? ? // Each of these methods also has an “Async” overload

    ? ? ? ? byte[] Get(string key);

    ? ? ? ? void Refresh(string key);

    ? ? ? ? void Remove(string key);

    ?

    ? ? ? ? // Specify absolute & sliding expiration thru options

    ? ? ? ? void Set(string key, byte[] value, DistributedCacheEntryOptions options);

    ? ? }

    }

    接下來在ASP.NET Core的Startup類中配置NCacheIDistributedCache

    public class Startup

    {

    ? ? ...

    ? ? public void ConfigureServices(IServiceCollection services)

    ? ? {

    ? ? ? ? ...

    ? ? ? ? services.AddNCacheDistributedCache();

    ? ? ? ? ...

    ? ? }

    ? ? ...

    }

    如果對緩存需求不高, 使用IDistributedCache保留了更改分布式緩存靈活性。但是要權衡這種放棄高級緩存特性的成本。為什么不考慮一下NCache?NCache API在ASP.NET Core應用內可以直接使用,和舊的ASP.NET Cache API非常相似,它包含了大量零成本新特性,可以獲得企業級的分布式緩存收益。記住一點,看在性能提升和擴展能力的份上,早用早享受。沒有這些高級特性,那只能可憐地緩存一些簡單數據。這份NCache caching features了解更多差別。

    ASP.NET Core會話存儲到分布式緩存


    舊的ASP.NET的會話狀態由框架提供,允許第三方組件以插件形式接入。在ASP.NET Core中的會話也是相似的,采用鏈式插件調用,有兩種方式使用NCache作為ASP.NET Core的會話存儲:

    1.NCache作為ASP.NET Core的IDistributedCache Provider存儲配置

    如果把NCache作為ASP.NET Core的IDistributedCache provider進行配置,NCache能自動的成為會話的默認存儲方式,不用再有多余的操作。但是相比于舊的ASP.NET會話狀態,這種方式能使用到的特性有限。

    以下是ASP.NET Core默認會話缺失的地方:

  • ASP.NET Core無會話鎖提供。

  • 自定義對象的byte數組支持:??ASP.NET Core強制你在把自定義對象存儲到會話前先轉換成byte數組。

  • 2. NCache作為ASP.NET Core的Sessions Provider配置

    比起前一個方式,NCache已經實現了ASP.NET Core的Sessions Provider。這種方式擁有更多的特性可以利用。

    以下是在Startup類進行配置的示例。

    public class Startup

    {

    ? ? ...

    ? ? public void Configure(IApplicationBuilder app,? IHostingEnvironment env)

    ? ? {

    ? ? ? ? ...

    ? ? ? ? app.UseNCacheSession();

    ? ? ? ? ...

    ? ? }?

    ? ? ...

    }

    你可以在appsettings.json文件中做如下ASP.NET Core會話配置。

    {

    ? ? ...

    ? ? "NCacheSessions": {

    ? ? ? ? ...

    ? ? ? ? "CacheName": "demoCache",

    ? ? ? ? "EnableLogs": "True",

    ? ? ? ? "RequestTimeout": "90",

    ? ? ? ? "EnableDetailLogs": "False",

    ? ? ? ? "ExceptionsEnabled": "True",

    ? ? ? ? "WriteExceptionsToEventLog": "False"

    ? ? }

    ? ? ...

    }


    在Configure NCache IDistributedCache Provider了解更多會話存儲配置信息。

    NCache是比Redis成為ASP.NET Core更好選擇的原因


    微軟提供了IDistributedCache Providers兩種可選方案。一個是SQL Server另一個是Redis。NCache比這兩種方案更勝一籌表面上看是因為執行更快,更易擴展,當然還有以下原因:

  • 原生.NET:??NCache是100%原生.NET,更易融入.NET應用技術棧。反觀來自Linux背景的Redis和原生.NET畢竟有兼容潛在問題。

  • 比Redis更快:??NCache確實比Redis要快。NCache客戶端緩存的執行能力表現不俗。

  • 更多特性:??NCache提供了Redis所沒有的分布式緩存特性。參見這里:Redis vs NCache。?

  • NCache更多詳情:Nache Details??Edition Comparison??Download?

    (原文:How to Optimize ASP.NET Core Performance with Distributed Cache?)

    相關文章:

    • 理解并從頭搭建redis集群

    • .net core 使用Redis的發布訂閱

    • ABP從入門到精通(3):aspnet-zero-core 使用Redis緩存

    • Redis集群~StackExchange.Redis(10月6號版1.1.608.0)連接Twemproxy支持Auth指令了

    原文地址 http://www.cnblogs.com/BeanHsiang/p/8733100.html


    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的用分布式缓存提升ASP.NET Core性能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。