前言: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就不能获得了。
后言:
以后认真学习关于缓存的知识。