thinkjs——redis

前言:redis

後臺某些操做的時候會用到緩存:好比用戶登陸或者校驗次數的情景。而本次碰見的情況就是在點擊「推送」按鈕的時候,須要判斷緩存中是否有其值,並將其次數限制爲固定值。緩存

過程:session

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

1

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

但是本身反覆看了好久,都不曉得怎樣操做這樣的業務。最後在老大的指點下,才找出來問題出在哪裏了……spa

-------------------------------------------------------------------------code

在thinkjs中,有直接操做redis的方法,而並不是是本身以前所想的只能在session中設置或者取redis。blog

2

具體的實現思路:get

...
  // -------------獲取緩存 格式爲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中的方法:it

1

後者淘汰的緣由:在用戶進行退出操做時u,session會全清,這樣上面再去countValue就不能獲得了。

後言:

以後認真學習關於緩存的知識。

相關文章
相關標籤/搜索