zoukankan      html  css  js  c++  java
  • [技术博客] 用户验证码验证机制---redis缓存数据库的使用

    作者:马振亚

    问题引入

    在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长。因为只有部分人才能验证成功,所以这个最开始想了两种思路,一个是所有用户发出申请成为社长,然后社联工作人员手动审核是否予通过用户的申请。但是这种思路的局限性就在于社联工作人员工作量比较大,需要人工审核过程比较多,比较消耗时间而且出错率比较高。后来大家讨论了一下采用了一种比较新的思路,就是社联那边只进行一次操作,提供给社长一个验证码,这个验证码的正确性由后端代码直接进行处理。后来大家讨论到验证码的失效性与不可重复性,决定把验证码的有效时长设置为10分钟(从社联申请出验证码)而且是单次验证有效(验证成功一次之后这个验证码就失效了)。

    初识redis

    这时候我们通过查阅资料决定了采用redis缓存数据库支持上述接口的开发,redis是Nosql数据库,是一个key-value存储系统。虽然redis是key-value的存储系统,但是redis支持的value存储类型是非常的多,比如字符串、链表、集合、有序集合和哈希。

    进过查阅资料讨论得到使用redis这样的Nosql数据库的一般场景如下:

    1) 当数据量的总大小一个机器放不下时;

    2) 数据索引一个机器的内存放不下时;

    3) 访问量(读写混合)一个实例放不下时。

    4) 需要进行失效性控制。

    实际应用

    在这个需求场景下,主要分为验证码生成保存以及用户验证两个部分。

    • 验证码生成主要步骤
      • 后端随机生成10位验证码。
      • 将验证码存入redis缓存中。
      • 通过查询redis缓存进行。
    • 验证码验证的主要步骤
      • 查询redis中记录的正确验证码。
      • 如果校验成功返回成功标志,同时将redis数据库中有记录删除。
      • 如果不成功返回失败标志即可。

    上述步骤用到的主要redis相关方法有set方法(存入数据库),get方法(从数据库中取值),remove方法(验证成功一次就失效,保证了单次有效性)。其中为了保持10分钟的预设有效性时间,需要在调用redis_set_cache()方法时加上时间参数。

    redis_set_cache(key,value,time)
    
  • 相关阅读:
    [iOS]利用系统NSRegularExpression使用正则表达式
    [iOS]URL编码和解码
    [其他]正则表达式大全
    [算法]不用第三个数交换2个数的位置
    java . -- IDEA运行最简单的Java程序Hello World
    IOS . -转载-10行代码搞定九宫格
    SourceTree --转载 SourceTree大文件上传提示POST git-receive-pack (chunked)相关问题记录
    iOS -转载-使用Navicat查看数据表的ER关系图
    iOS -转载-开发之个人开发者账号转公司开发者账号
    iOS --转载2018苹果$299美元企业级开发者账号申请攻略
  • 原文地址:https://www.cnblogs.com/buaareadsun/p/10881820.html
Copyright © 2011-2022 走看看