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


一.Redis是什么?

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。(引用自百度百科)
 
二.為什么使用Redis

Redis是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型。Redis提供了5種不同類型的數據結構,各式各樣的問題都可以很自然地映射到這些數據結構上:Redis的數據結構致力於幫助用戶解決問題,而不會像其他數據庫那樣,要求用戶扭曲問題來適應數據庫。除此之外,通過復制、持久化(persistence)和客戶端分片(client-side sharding)等特性,用戶可以很方便地將Redis擴展成一個能夠包含數百GB數據、每秒處理上百萬次請求的系統。

使用Redis可以極大的提升我們應用程序的性能,比如一個小說網站,需要顯示閱讀量排名前10的小說,如果每次都要去從數據庫查詢就太耗費數據庫性能了,也會增加我們的響應時間。我們可以將這個列表放在redis里面,這樣每次就可以從redis里面取數據量,速度是非常快的。

三.aspnet-zero-core 如何使用Redis緩存

  項目“MyCompanyName.MyProject.Web.Core” 以下簡稱“Web.Core”

  項目“MyCompanyName.MyProject.Web.Mvc” 以下簡稱“Web.Mvc”

  使用Redis緩存,請先通過nuget安裝包 Abp.RedisCache

  1.打開項目“Web.Core” 的“AbpZeroTemplateWebCoreModule.cs” 在“PreInitialize”方法里

1             Configuration.Caching.UseRedis(options =>
2             {
3                 options.ConnectionString = _appConfiguration["Abp:RedisCache:ConnectionString"];
4                 options.DatabaseId = _appConfiguration.GetValue<int>("Abp:RedisCache:DatabaseId");
5             });

  2.修改redis配置 配置文件在項目“Web.Mvc”里 appsettings.json

 

  這里說一下DatabaseId,及Redis數據庫ID,不同的數據庫ID有助於在同一服務器中創建不同的密鑰空間(隔離緩存)。

  3.設置默認過期時間,同樣是在 項目“Web.Core” 的“AbpZeroTemplateWebCoreModule.cs” 在“PreInitialize”方法里,放在redis代碼之前 

  

 1             //設置所有緩存的默認過期時間
 2             Configuration.Caching.ConfigureAll( cache =>
 3             {
 4                 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
 5             });
 6             //設置某個緩存的默認過期時間 根據 "CacheName" 來區分
 7             Configuration.Caching.Configure("CacheName", cache =>
 8             {
 9                 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
10             });

 

  4. 最后不要忘了設置模塊依賴

四.驗證是否設置成功

啟動運行項目,查看redis里是否有數據。這里我是用的是redisdesktopmanager,下載地址:https://redisdesktop.com/download

很明顯的看出已經使用成功了。

五.如何在代碼中使用緩存

1.通過容器注入緩存管理器,這里可以使用屬性注入或者構造方法注入均可

2.使用緩存

這里Get方法有兩個參數,第一個參數是緩存中的key,第二個參數是當緩存中數據不存在,那么執行獲取數據的方法。

 

思考:我們都知道Redis是跨進程甚至跨域的緩存,有時候我們沒必要使用Redis緩存,使用本機緩存就夠,我想一定會存在同時使用Redis緩存和本機緩存即 MemoryCache,

ABP默認應該是不支持存在多個緩存,至少目前我在官方文檔沒看到。我們查看,啟用Redis緩存那幾句代碼中, UseRedis 方法的源代碼:

 

可以發現在上圖紅框處注入了 AbpRedisCacheManager ,,然后可想而知我們在使用緩存的時候通過容器注入的就是Redis緩存了,那么我們只需要將MemoryCache也注入即可同時使用Redis和MemoryCache。

這只是我的想法,並沒有進行測試,有興趣的朋友可以測試一下。

 

好了Redis的設置十分簡單,下篇將會給大家分享一下,我在core下使用通過mysql數據庫來進行存儲的hangfire的那些坑~

 如果你覺得寫的不錯,請點一下下面的“推薦”,這是對我分享技術經驗的支持,謝謝!↓↓↓↓↓↓↓↓↓↓↓


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM