當前位置:
首頁 > 知識 > ABP從入門到精通(3):aspnet-zero-core 使用Redis緩存

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

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

這裡說一下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. 最後不要忘了設置模塊依賴

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

四.驗證是否設置成功

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

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

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

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

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

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

2.使用緩存

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

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

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

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

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

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

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

原生js之千位分隔符
Golang使用pprof和qcachegrind進行性能監控
python中數字類型與處理工具
SpringBoot上傳任意文件功能的實現

TAG:達人科技 |

您可能感興趣

SpringBoot:SpringDataRedis緩存改造
Hitachi Vantara升級Skylaking伺服器加入Optane緩存和GPU
TinyShop緩存文件獲取WebShell之0day
緩存架構SpringBoot集成Curator實現zookeeper分散式鎖
spring-boot-2.0.3之redis緩存實現
python的緩存庫:cacheout
Flutter圖片緩存 Image.network源碼分析
redis緩存和cookie實現Session共享
英特爾推出升級版Optane Memory M15緩存SSD
使用RedisTemplate(JDK序列化策略)緩存實體類
MyBatis中的緩存
Python + Memcached: 在分散式應用程序中實現高效緩存
Python + Memcached:在分散式應用程序中實現高效緩存
Python+Memcached:在分散式應用程序中實現高效緩存
int 和 Integer 有什麼區別?談談 Integer 的值緩存範圍
英特爾八核Coffee Lake處理器曝光:2.6GHz,16MB緩存
windows緩存
杉岩數據智能緩存技術AgileCache亮相2018 Ceph亞太峰會
逍遙-《Go實現的高性能http緩存伺服器Jaguar》
10nm工藝!Intel全新架構Ice Lake首次現身:一二級緩存增大