17 基于SqlSugar的開發框架循序漸進介紹-- 基于CSRedis實現緩存的處理

在一個應用系統的開發框架中,往往很多地方需要用到緩存的處理,有些地方是為了便于記錄用戶的數據,有些地方是為了提高系統的響應速度,如有時候我們在發送一個短信驗證碼的時候,可以在緩存中設置幾分鐘的過期時間,這樣驗證短信驗證碼的時候 , 就會自動判斷是過期了 。本篇隨筆結合CSRedis的使用,介紹如何實現緩存的初始化及使用的處理 。
1、在基于.netCore的Web API后端使用CSRedis關于CSRedis的使用,我們可以參考Github網站:https://github.com/2881099/csredis 進行了解 。
首先我們在使用前 , 需要添加對應的程序集應用 。


17 基于SqlSugar的開發框架循序漸進介紹-- 基于CSRedis實現緩存的處理

文章插圖
CSRedisCore是必須的,而Caching.CSRedis則是在用到分布式緩存的時候需要用到 。
初始化CSRedis也比較簡單,如代碼所示 。
var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=123,defaultDatabase=13,prefix=my_");不過我們的Redis配置一般放在appSettings.json文件中,不是直接硬編碼的,所以需要調整一下 。
//初始化Redis及分布式緩存var redisConnectionString = builder.Configuration["CSRedis:ConnectString"];RedisHelper.Initialization(new CSRedisClient(redisConnectionString));builder.Services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance));常規的緩存設置,通過鍵、值、時間設置等幾個內容進行處理,如下代碼所示 。
RedisHelper.Set("test1", "123123", 60);RedisHelper.Get("test1");如果我們要清空所有的緩存鍵值,那么對鍵進行模式匹配進行處理即可 。
/// <summary>/// 清空Redis緩存/// </summary>protected void ClearRedisCache(){    //查找所有分區節點中符合給定模式(pattern)的 key    var cacheKeys = RedisHelper.Keys("*");    RedisHelper.Del(cacheKeys);}除了常規的緩存處理 , redis也支持消息隊列的處理 , 消息隊列最熟悉無疑是 rabbitmq , 它基本是業界標準的解決方案 。另外 redis 也提供了多種實現輕訂閱方法 。如下面是一案例代碼 。
//程序1:使用代碼實現訂閱端var sub = RedisHelper.Subscribe(("chan1", msg => Console.WriteLine(msg.Body)));//sub.Disponse(); //停止訂閱//程序2:使用代碼實現發布端RedisHelper.Publish("chan1", "111");我們這里不深究消息隊列的處理,有興趣的可以參考文章《【由淺至深】redis 實現發布訂閱的幾種方式》進行了解即可 。
2、前端發送短信驗證碼及后端判斷我們這里以一個短信驗證碼登錄的前端來介紹CSRedis緩存的設置、獲取、移除等操作過程 。
例如,我們的移動前端,需要驗證碼登錄系統的時候,需要發送驗證碼的操作 , 如下所示 。
17 基于SqlSugar的開發框架循序漸進介紹-- 基于CSRedis實現緩存的處理

文章插圖
前端通過初步判斷手機號碼正確后 , 可以向后端請求發送驗證碼,如下邏輯代碼所示(vue)
// 獲取驗證碼getCode() {    if (this.model.mobile.length < 11 && !uni.$u.test.mobile(this.model.mobile)) {        uni.$u.toast('手機號碼不正確')        return;    }    //發送短信驗證碼    var params = {        PhoneNumber: this.model.mobile    }    user.SendPhoneLoginSmsCode(params).then(res => {        if (res.success) {            this.show = false;            uni.$u.toast(`驗證碼已發送至手機 ${this.model.mobile},請注意查收!`)            let interval = setInterval(() => {                this.second--;                if (this.second <= 0) {                    this.show = true;                    clearInterval(interval);                }            }, 1000);        } else {            uni.$u.toast('發送出現錯誤:' + res.errorMessage)        }    })}

推薦閱讀