• [技术博客] 用户验证码验证机制---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)
    
  • 相关阅读:
    c/c++混编
    inotify监听文件
    二维数组
    CentOS7 修改系统时间
    书签书签
    c语言并行程序设计之路(四)(barrier的实现和条件变量)
    MPI分布式内存编程(一):预备知识
    有些狮子不喝咖啡:条件式与合取式的翻译
    【部分博客已搬家至博客园】对CSDN、博客园和简书的一点比较
    c语言并行程序设计之路(三)(信号量与同步)
  • 原文地址:https://www.cnblogs.com/buaareadsun/p/10881820.html
Copyright © 2020-2023  润新知