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就不能获得了。

后言:

以后认真学习关于缓存的知识。

相关文章
相关标签/搜索