thinkjs——redis


前言:

后台某些操作的時候會用到緩存:比如用戶登錄或者校驗次數的情景。而本次遇見的狀況就是在點擊“推送”按鈕的時候,需要判斷緩存中是否有其值,並將其次數限制為固定值。

過程:

剛聽到此需求的時候,首先想到的是將這個次數寫在session中,於是想了很久,便寫出了下面的代碼:

1

實現思路:取日期YYYY-MM-DD格式的數字存在session中,並通過取其值比較與配置(config)文件中設置的最大推送次數作比較,若小於最大次數,則給其值++,否則提示超出次數限制。可是在自測的時候,卻發現了一個問題:這樣寫在session中的,如果出現用戶退出登錄的情況下,那它的緩存就會丟掉,也就意味着我們的這個設置並不會起任何作用。

可是自己反復看了很久,都不曉得怎樣操作這樣的業務。最后在老大的指點下,才找出來問題出在哪里了……

-------------------------------------------------------------------------

在thinkjs中,有直接操作redis的方法,而並非是自己之前所想的只能在session中設置或者取redis。

2

具體的實現思路:

...
  // -------------獲取緩存 格式為2017-03-20-----------
        let newDate = new Date().getFullYear()+"-"+(new Date().getMonth()+1)+"-"+new Date().getDate();
        let countValue =await think.cache(newDate, undefined, {type: 'redis'});
        if(countValue){//有key值
            if(countValue >= this.config('sendatricleMaxcount')){
                return this.success('今日文章推送共為'+countValue+'次,已達上限!')
            }else{
                await think.cache(newDate, ++countValue);
            }
        }else{//無key值
            await think.cache(newDate, 1);
        }
...

在這里,再附上之前寫在session中的方法:

1

后者淘汰的原因:在用戶進行退出操作時u,session會全清,這樣上面再去countValue就不能得到了。

后言:

之后認真學習關於緩存的知識。


免責聲明!

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



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