net core WebApi——緩存神器Redis


 

前言

中秋過完不知不覺都已經快兩周沒動這個工程了,最近業務需要總算開始搞后台雲服務了,果斷直接net core搞起,在做的中間遇到了不少問題,這個后續會一點點列出來包括解決方法,今天就先把之前挖的坑填一個。

Redis

之前在緩存那篇提到過,CookieSessionCache這幾個不同的緩存方式,Cookie是存在客戶端瀏覽器的,Session實質上也是客戶端的存儲,至於Cache是服務端的,但是如果是分布式的話,這幾個方式可能除了Cookie其他兩個都要有點兒問題,畢竟一台服務只存儲自身一台,如果多台的話,需要涉及到多服務的交互,比如一台服務做了Cache存儲,需要給其他服務發送內部信號或是http請求,其他服務根據請求執行對應操作。

當然這是在沒有用到Redis的前提下,Redis是解決分布式緩存的神器,相當於是自身一台服務器專門處理數據的讀寫,可以理解為數據服務器(個人感覺。。。),至於自己業務的分布式只是為了業務需要去執行,需要用到數據緩存即可直接調用Redis的讀寫操作(當然,各個服務的Redis配置要保持一致)。

Redis的安裝和配置在Linux配置部署_新手向(四)——Redis安裝與配置已經說過,當時就是為了使用Redis而做了個小鋪墊。

使用

首先,只要是類庫肯定是引入Nuget包了,我們在April.Util引入Microsoft.Extensions.Caching.Redis,當然其他也有StackExchange.RedisCSRedisCore,這里先試試官方的吧,官方擴展包地址

引入完之后,我們在appsettings.json來配置下地址目錄。
配置
之后我們看下Redis的方法,畢竟調用第三方都是看看然后根據自己需要裹一下。
Redis

也是先要初始化配置信息,然后創建實體對象,調用方法,這里說明下,默認的value值是byte[],當然官方也有擴展方法。
Redis
好了,看完了方法,我們來開始Util吧。

RedisUtil

首先,我們還是要先做配置信息,前面已經在appsettings寫過配置信息,這里直接在AprilConfig中添加上。

private static string _IsOpenCache = string.Empty; /// <summary> /// 是否使用Redis /// </summary> public static bool IsOpenCache { get { if (string.IsNullOrEmpty(_IsOpenCache)) { _IsOpenCache = Configuration["Redis:IsOpenRedis"]; } if (_IsOpenCache.ToLower() == "true") { return true; } return false; } } private static string _RedisConnectionString = string.Empty; /// <summary> /// Redis默認連接串 /// </summary> public static string RedisConnectionString { get { if (string.IsNullOrEmpty(_RedisConnectionString)) { _RedisConnectionString = Configuration["Redis:ConnectionString"]; } return _RedisConnectionString; } } 

配置信息設置完成之后,開始初始化Redis的方法。

        private static RedisCache _redisCache = null; private static RedisCacheOptions options = null; /// <summary> /// 初始化Redis /// </summary> public static void InitRedis() { if (AprilConfig.IsOpenCache) { _redisCache = new RedisCache(GetOptions()); } } /// <summary> /// 獲取配置項信息 /// </summary> /// <returns></returns> protected static RedisCacheOptions GetOptions() { options = new RedisCacheOptions(); options.Configuration = AprilConfig.RedisConnectionString; options.InstanceName = "April.Redis"; return options; } /// <summary> /// 添加數據 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="ExprireTime">過期時間</param> public static void Add(string key, object value, int ExprireTime = 10) { if (string.IsNullOrEmpty(key)) { return; } string strValue = string.Empty; try { strValue = JsonConvert.SerializeObject(value); } catch (Exception ex) { LogUtil.Error($"Redis.Add轉換失敗:{ex.Message}"); } if (!string.IsNullOrEmpty(strValue)) { _redisCache.SetString(key, strValue, new Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions() { AbsoluteExpiration = DateTime.Now.AddMinutes(ExprireTime) }); } } /// <summary> /// 獲取數據(對象) /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="key">鍵</param> /// <returns></returns> public static T Get<T>(string key) { string value = Get(key); if (string.IsNullOrEmpty(value)) { return default(T); } T obj = default(T); try { obj = JsonConvert.DeserializeObject<T>(value); } catch (Exception ex) { LogUtil.Error($"Redis.Get轉換失敗:{ex.Message},數據:{value}"); } return obj; } /// <summary> /// 移除數據 /// </summary> /// <param name="key">鍵</param> public static void Remove(string key) { if (!string.IsNullOrEmpty(key)) { _redisCache.Remove(key); } } /// <summary> /// 重置數據 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="expireTime">過期時間</param> public static void Replace(string key, object value, int expireTime = 10) { if (!string.IsNullOrEmpty(key)) { Remove(key); Add(key, value, expireTime); } } 

具體使用的方法,這里不多寫了,代碼地址見net core Webapi 總目錄,感覺代碼貼的多了,自己也習慣了復制粘貼,看一個封裝好的方法,就要去看他的源碼(如果只是用的話就算了),這樣對方法的使用以及自身的業務需要封裝會有很好的幫助,畢竟會用是第一步,會改是第二步,封裝是第三步,自己寫那就是最終級了(這句純屬自勉)。

測試

好了,寫完之后,習慣來一遍測試,不想自己整理的東西最終還是不能用,千篇一律不可怕,可怕的是不知道最終的效果。
新增
測試
結果

獲取
測試
結果

覆蓋
ps:說是覆蓋,其實就是刪除然后新增-,-|||
測試
結果

刪除
測試
結果

小結

寫到這里基本上都結束了,簡單的說明了Redis的使用,后續還是會不斷更新,比如那么多database,如果隨意切換,redis存儲之后會不會有什么其他問題等等,學以致用,用方知錯,錯而能改,改了就行

 

來源 :https://www.cnblogs.com/AprilBlank/p/11571365.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM