前言:redis
後臺某些操做的時候會用到緩存:好比用戶登陸或者校驗次數的情景。而本次碰見的情況就是在點擊「推送」按鈕的時候,須要判斷緩存中是否有其值,並將其次數限制爲固定值。緩存
過程:session
剛聽到此需求的時候,首先想到的是將這個次數寫在session中,因而想了好久,便寫出了下面的代碼:學習
實現思路:取日期YYYY-MM-DD格式的數字存在session中,並經過取其值比較與配置(config)文件中設置的最大推送次數做比較,若小於最大次數,則給其值++,不然提示超出次數限制。但是在自測的時候,卻發現了一個問題:這樣寫在session中的,若是出現用戶退出登陸的狀況下,那它的緩存就會丟掉,也就意味着咱們的這個設置並不會起任何做用。this
但是本身反覆看了好久,都不曉得怎樣操做這樣的業務。最後在老大的指點下,才找出來問題出在哪裏了……spa
-------------------------------------------------------------------------code
在thinkjs中,有直接操做redis的方法,而並不是是本身以前所想的只能在session中設置或者取redis。blog
具體的實現思路: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
後者淘汰的緣由:在用戶進行退出操做時u,session會全清,這樣上面再去countValue就不能獲得了。
後言:
以後認真學習關於緩存的知識。