標籤:tps 擷取 推薦 主從 tabs 基礎上 pre 如何使用 修改
一.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的那些坑~
如果你覺得寫的不錯,請點一下下面的“推薦”,這是對我分享技術經驗的支援,謝謝!↓↓↓↓↓↓↓↓↓↓↓
ABP從入門到精通(3):aspnet-zero-core 使用Redis緩衝