作者:马振亚

问题引入

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

[技术博客] 用户验证码验证机制---redis缓存数据库的使用的更多相关文章

  1. [技术博客]阿里云签名机制字符串的C语言实现

    [技术博客]阿里云签名机制字符串的C语言实现 问题描述见:阿里云签名机制 话不多说,上字符串函数转化函数代码 bool AlicloudRequest::sendV2Request() { if( q ...

  2. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

  3. [技术博客]大闸蟹的技术博客,通过gitlab api进行用户批量创建

    技术博客--通过gitlab api批量注册用户 gitlab登录界面本身提供了register功能,但需要手工一个个添加,对于一次性会添加整个班级的学生的软工平台来说并不科学合理.使用gitlab ...

  4. 红眼技术博客 » redis连接池红眼技术博客 » redis连接池

    红眼技术博客 » redis连接池 redis连接池

  5. 【技术博客】忘记密码界面的Vue前端实现

    一.基本流程 [登录界面] --> [点击忘记密码] --> [输入个人邮箱和验证码] --> [系统发送邮箱验证] --> [用户在限定时间内登录邮箱,查收验证码] --&g ...

  6. ******IT公司面试题汇总+优秀技术博客汇总

    滴滴面试题:滴滴打车数据库如何拆分 前端时间去滴滴面试,有一道题目是这样的,滴滴每天有100万的订单,如果让你去设计数据库,你会怎么去设计? 当时我的想法是根据用户id的最后一位对某个特殊的值取%操作 ...

  7. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  8. [置顶] 创建GitHub技术博客全攻略

    [置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...

  9. 创建GitHub技术博客

    创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...

随机推荐

  1. 【JVM学习笔记二】垃圾收集器与内存分配策略

    1. 概述 1) GC的历史比Java久远 2) GC需要完成的三件事: | 哪些内存需要回收 | 什么时候回收 | 如何回收 3) Java内存运行时区域各个部分: | Java虚拟机栈.计数器.本 ...

  2. Nginx 开启status用以监控状态信息

    Nginx 可以通过with-http_stub_status_module模块来监控nginx的一些状态信息.1.通过nginx -V来查看是否有with-http_stub_status_modu ...

  3. 15、vue项目封装axios并访问接口

    1.在src下新建util文件夹,在util下新建request.js文件: 封装axios: import axios from 'axios' import QS from 'qs'; // im ...

  4. BootStrap简单table

    效果图: 代码如下: <%-- Created by IntelliJ IDEA. User: 冷噫雪 Date: 2019/9/1 Time: 13:06 To change this tem ...

  5. mysql: show processlist 详解

    最近排查一些MySQL的问题,会经常用到 show processlist,所以在这里把这个命令总结一下,做个备忘,以备不时只需. show processlist 是显示用户正在运行的线程,需要注意 ...

  6. 初探PHP设计模式

    设计模式不是一套具体的语言框架,是行之有效的编码规范,是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.合理 ...

  7. linux 常用工具记录及简介

    前言 linuxz虽然各种软件的生态还比较差,但是大势所趋,早晚都是要用的.记录下自己常用的软件,要是那天系统崩了重装也舒服点 编程工具 pycharm专业版(社区版也能用,只是用惯了专业版) * 下 ...

  8. [Startup].Linux启动时间优化

    转自:https://www.cnblogs.com/agui125/p/10070559.html 正文 回到顶部 1. 实践过程 我是对海思3559进行启动时间优化的.具体的操作可以参考<H ...

  9. xtrabackup 使用

    创建具有完全备份所需的最小权限的数据库用户的SQL示例如下 mysql> CREATE USER 'bkpuser'@'%' IDENTIFIED BY 's3cret';mysql> G ...

  10. 第四篇 -- XPath

    .Net框架下的System.Xml.XPath命名空间提供了一系列的类,允许你应用XPath数据模式查询和展示XML文档数据. 一.XPath介绍 XPath有七种类型的节点:元素.属性.文本.命名 ...