[技术博客] 用户验证码验证机制---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)
[技术博客] 用户验证码验证机制---redis缓存数据库的使用的更多相关文章
- [技术博客]阿里云签名机制字符串的C语言实现
[技术博客]阿里云签名机制字符串的C语言实现 问题描述见:阿里云签名机制 话不多说,上字符串函数转化函数代码 bool AlicloudRequest::sendV2Request() { if( q ...
- 【技术博客】JWT的认证机制Django项目中应用
开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...
- [技术博客]大闸蟹的技术博客,通过gitlab api进行用户批量创建
技术博客--通过gitlab api批量注册用户 gitlab登录界面本身提供了register功能,但需要手工一个个添加,对于一次性会添加整个班级的学生的软工平台来说并不科学合理.使用gitlab ...
- 红眼技术博客 » redis连接池红眼技术博客 » redis连接池
红眼技术博客 » redis连接池 redis连接池
- 【技术博客】忘记密码界面的Vue前端实现
一.基本流程 [登录界面] --> [点击忘记密码] --> [输入个人邮箱和验证码] --> [系统发送邮箱验证] --> [用户在限定时间内登录邮箱,查收验证码] --&g ...
- ******IT公司面试题汇总+优秀技术博客汇总
滴滴面试题:滴滴打车数据库如何拆分 前端时间去滴滴面试,有一道题目是这样的,滴滴每天有100万的订单,如果让你去设计数据库,你会怎么去设计? 当时我的想法是根据用户id的最后一位对某个特殊的值取%操作 ...
- 【转】【技术博客】Spark性能优化指南——高级篇
http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...
- [置顶] 创建GitHub技术博客全攻略
[置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...
- 创建GitHub技术博客
创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...
随机推荐
- Spring的配置文件找不到元素 'beans' 的声明
Spring的配置文件找不到元素 'beans' 的声明 一般是由Spring的版本导致的,你可以尝试使用如下的某一种. <?xml version="1.0" encodi ...
- selenium自动化爬虫测试
import time from selenium import webdriver from lxml import etree from selenium.webdriver import Act ...
- 解锁 redis 锁的正确姿势
redis 是 php 的好朋友,在 php 写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php 不能在内存中用锁,不能使用 zo ...
- Jmeter 使用集合点
概念解释 集合点,这个概念是loadrunner中的. 这个东西可以这样理解,比如我们在跑100起跑的时候,需要在发令枪响之后,10人同时起步,等10人同时达到终点, 再次开发令枪,重复上面的动作. ...
- idea 端口被占用
打开你的DOS命令首先输入 netstat -ano|findstr 8088 (8088即为被占用的端口号) 再输入taskkill /pid 7348 /f (7348即为上 ...
- X509Certificate 类
地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.x509certificates.x509cer ...
- PAT甲级1013题解——并查集+路径压缩
题目分析: 本题初步浏览题目就知道是并查集的模板题,数据输入范围N为1~1000,则M的范围为0~1000^2,通过结构体记录每一对连线的关系,p[]数组记录每个节点的跟,对于k次查询,每次都要重新维 ...
- python正则表达式(7)--flag修饰符、match对象属性
正则表达式—修饰符 正则表达式可以包含一些标志修饰符来控制匹配模式,用在正则表达式处理函数中的flag参数中,为可选参数. (1) re.I 全写(re.IGNORECASE) 表示使匹配时,忽略大小 ...
- 使用adb/Linux获取网关ip
ip route list table
- li的inline-block出现间隙原因,解决方案
<style type="text/css"> body{ margin:0 0; padding:0 0; font-size: 14; text-decoratio ...