[技术博客] 用户验证码验证机制---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 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...
随机推荐
- Prime Path POJ-3126
The ministers of the cabinet were quite upset by the message from the Chief of Security stating that ...
- kvm第一章--概念
- 原生js实现模块来回拖拽效果
代码比较冗余,还没来得及做整理,往见谅. 主要用到的 JS 事件有: onmousedown:鼠标点下事件 onmousemove:鼠标移动事件 onmouseup:鼠标放开事件 具体代码如下: &l ...
- vue与webpack开发环境搭建:从无到有
一个vue从无到有的搭建过程. 一.不论是webpack还是vue,最初的第一步就是安装node.js.它是基石. 从官网下载你需要的安装包:官网下载链接:http://nodejs.cn/downl ...
- 转 根据CPU核心数确定线程池并发线程数
转自: https://www.cnblogs.com/dennyzhangdd/p/6909771.html?utm_source=itdadao&utm_medium=referral 目 ...
- echart添加轴最小值,最大值,间隔以及设置线条颜色
yAxis: [{ type: 'value' }, { type: 'value', name: '上证指数', //设置最小值,最大值,间隔 min: 1000, max: 6000, inter ...
- svn进行上传项目
当svn的服务器搭建成功后,就可以进行上传项目了. 右键,选择客户端的repo-browser, 输入地址 然后就可以浏览所有项目: 然后在版本仓库上,右键,add folder, 添加对应的文件夹即 ...
- Java8新特性。
常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...
- Nginx + PHP 修改单次请求 最大执行时间
1. php.ini (usr/local/php/etc) max_execution_time = 2. php-fpm.conf (usr/local/php/etc) request_t ...
- Prometheus学习笔记(4)什么是pushgateway???
目录 一.pushgateway介绍 二.pushgateway的安装运行和配置 三.自定义脚本发送pushgateway 四.使用pushgateway的优缺点 一.pushgateway介绍 pu ...