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

一.Redis是什麼?mysql

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

使用Redis能夠極大的提高咱們應用程序的性能,好比一個小說網站,須要顯示閱讀量排名前10的小說,若是每次都要去從數據庫查詢就太耗費數據庫性能了,也會增長咱們的響應時間。咱們能夠將這個列表放在redis裏面,這樣每次就能夠從redis裏面取數據量,速度是很是快的。sql

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

  項目「MyCompanyName.MyProject.Web.Core」 如下簡稱「Web.Core」json

  項目「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有助於在同一服務器中建立不一樣的密鑰空間(隔離緩存)。app

  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的那些坑~

 若是你以爲寫的不錯,請點一下下面的「推薦」,這是對我分享技術經驗的支持,謝謝!↓↓↓↓↓↓↓↓↓↓↓

相關文章
相關標籤/搜索