thinkjs——redis

时间:2023-03-15 12:15:14

前言:

后台某些操作的时候会用到缓存:比如用户登录或者校验次数的情景。而本次遇见的状况就是在点击“推送”按钮的时候,需要判断缓存中是否有其值,并将其次数限制为固定值。

过程:

刚听到此需求的时候,首先想到的是将这个次数写在session中,于是想了很久,便写出了下面的代码:

thinkjs——redis

实现思路:取日期YYYY-MM-DD格式的数字存在session中,并通过取其值比较与配置(config)文件中设置的最大推送次数作比较,若小于最大次数,则给其值++,否则提示超出次数限制。可是在自测的时候,却发现了一个问题:这样写在session中的,如果出现用户退出登录的情况下,那它的缓存就会丢掉,也就意味着我们的这个设置并不会起任何作用。

可是自己反复看了很久,都不晓得怎样操作这样的业务。最后在老大的指点下,才找出来问题出在哪里了……

-------------------------------------------------------------------------

在thinkjs中,有直接操作redis的方法,而并非是自己之前所想的只能在session中设置或者取redis。

thinkjs——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中的方法:

thinkjs——redis

后者淘汰的原因:在用户进行退出操作时u,session会全清,这样上面再去countValue就不能得到了。

后言:

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