ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存
一.Redis是什么?
redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實現(xiàn)了master-slave(主從)同步。
Redis 是一個高性能的key-value數(shù)據(jù)庫。 redis的出現(xiàn),很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。存盤可以有意無意的對數(shù)據(jù)進行寫操作。由于完全實現(xiàn)了發(fā)布/訂閱機制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴展性和數(shù)據(jù)冗余很有幫助。(引用自百度百科)
?
二.為什么使用Redis
Redis是一個遠(yuǎn)程內(nèi)存數(shù)據(jù)庫,它不僅性能強勁,而且還具有復(fù)制特性以及為解決問題而生的獨一無二的數(shù)據(jù)模型。Redis提供了5種不同類型的數(shù)據(jù)結(jié)構(gòu),各式各樣的問題都可以很自然地映射到這些數(shù)據(jù)結(jié)構(gòu)上:Redis的數(shù)據(jù)結(jié)構(gòu)致力于幫助用戶解決問題,而不會像其他數(shù)據(jù)庫那樣,要求用戶扭曲問題來適應(yīng)數(shù)據(jù)庫。除此之外,通過復(fù)制、持久化(persistence)和客戶端分片(client-side sharding)等特性,用戶可以很方便地將Redis擴展成一個能夠包含數(shù)百GB數(shù)據(jù)、每秒處理上百萬次請求的系統(tǒng)。
使用Redis可以極大的提升我們應(yīng)用程序的性能,比如一個小說網(wǎng)站,需要顯示閱讀量排名前10的小說,如果每次都要去從數(shù)據(jù)庫查詢就太耗費數(shù)據(jù)庫性能了,也會增加我們的響應(yīng)時間。我們可以將這個列表放在redis里面,這樣每次就可以從redis里面取數(shù)據(jù)量,速度是非常快的。
三.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”方法里
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數(shù)據(jù)庫ID,不同的數(shù)據(jù)庫ID有助于在同一服務(wù)器中創(chuàng)建不同的密鑰空間(隔離緩存)。
3.設(shè)置默認(rèn)過期時間,同樣是在?項目“Web.Core” 的“AbpZeroTemplateWebCoreModule.cs” 在“PreInitialize”方法里,放在redis代碼之前
1 //設(shè)置所有緩存的默認(rèn)過期時間
2 Configuration.Caching.ConfigureAll( cache =>
3 {
4 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
5 });
6 //設(shè)置某個緩存的默認(rèn)過期時間 根據(jù) "CacheName" 來區(qū)分
7 Configuration.Caching.Configure("CacheName", cache =>
8 {
9 cache.DefaultAbsoluteExpireTime = TimeSpan.FromMinutes(2);
10 });
?
4.?最后不要忘了設(shè)置模塊依賴
四.驗證是否設(shè)置成功
啟動運行項目,查看redis里是否有數(shù)據(jù)。這里我是用的是redisdesktopmanager,下載地址:https://redisdesktop.com/download
很明顯的看出已經(jīng)使用成功了。
五.如何在代碼中使用緩存
1.通過容器注入緩存管理器,這里可以使用屬性注入或者構(gòu)造方法注入均可
2.使用緩存
這里Get方法有兩個參數(shù),第一個參數(shù)是緩存中的key,第二個參數(shù)是當(dāng)緩存中數(shù)據(jù)不存在,那么執(zhí)行獲取數(shù)據(jù)的方法。
?
思考:我們都知道Redis是跨進程甚至跨域的緩存,有時候我們沒必要使用Redis緩存,使用本機緩存就夠,我想一定會存在同時使用Redis緩存和本機緩存即 MemoryCache,
ABP默認(rèn)應(yīng)該是不支持存在多個緩存,至少目前我在官方文檔沒看到。我們查看,啟用Redis緩存那幾句代碼中, UseRedis 方法的源代碼:
?
可以發(fā)現(xiàn)在上圖紅框處注入了?AbpRedisCacheManager ,,然后可想而知我們在使用緩存的時候通過容器注入的就是Redis緩存了,那么我們只需要將MemoryCache也注入即可同時使用Redis和MemoryCache。
這只是我的想法,并沒有進行測試,有興趣的朋友可以測試一下。
?
好了Redis的設(shè)置十分簡單,下篇將會給大家分享一下,我在core下使用通過mysql數(shù)據(jù)庫來進行存儲的hangfire的那些坑~
相關(guān)文章:
-
ABP從入門到精通(1):aspnet-zero-core項目啟動及各項目源碼說明
-
ABP從入門到精通(2):aspnet-zero-core 使用MySql數(shù)據(jù)庫
-
理解并從頭搭建redis集群
-
.net core 使用Redis的發(fā)布訂閱
原文地址:http://www.cnblogs.com/stulzq/p/7271692.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 15.5预览
- 下一篇: SQL2017 Azure SQL新功能