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