zoukankan      html  css  js  c++  java
  • thinkjs——redis

    前言:

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

    过程:

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

    1

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

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

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

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

    2

    具体的实现思路:

    ...
      // -------------获取缓存 格式为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中的方法:

    1

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

    后言:

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

  • 相关阅读:
    redis的两种备份方式
    Vue—事件修饰符
    css3实现颤动的动画
    初学者可能不知道的vue技巧
    使用slot-scope复制vue中slot内容
    pre-commit钩子,代码质量检查
    爬虫可视化点选配置工具之获取鼠标点选元素
    Vue源码探究-事件系统
    使用electron实现百度网盘悬浮窗口功能!
    electron实现qq快捷登录!
  • 原文地址:https://www.cnblogs.com/zhengyeye/p/6591131.html
Copyright © 2011-2022 走看看