一.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的那些坑~
如果你覺得寫的不錯,請點一下下面的“推薦”,這是對我分享技術經驗的支持,謝謝!↓↓↓↓↓↓↓↓↓↓↓