Redis从入门到精通-手机验证码
一、业务场景,需求
用户在手机端点击获取短信验证码,且用户一个手机号每天只能发三次短信,手机端接收到6位验证码,进行比较。
二、实现
1、6位随机数工具类
2、2个key 一个用来设置 1天时间,校验该手机号发送几次,一个key存验证码
三、代码
package com.mangoubiubiu; import com.mangoubiubiu.utils.RandomUtils; import org.junit.Test; import redis.clients.jedis.Jedis; import java.util.Set; public class JedisTest { public static void main(String[] args) { //verifyCode("123123123123"); checkCode("757178","13807369783"); } //做验证码校验 public static void checkCode(String code,String phone){ Jedis jedis=new Jedis("192.168.117.134",6379); //验证码key String codeKey="verifyCode"+phone+":code"; String s = jedis.get(codeKey); if(code.equals(s)){ System.out.println("验证成功"); }else { System.out.println("验证失败"); } } public static void verifyCode(String phone){ //创建Jedis对象 Jedis jedis=new Jedis("192.168.117.134",6379); //拼接key //手机验证码key拼接 String countKey="verifyCode"+phone+":count"; //验证码key String codeKey="verifyCode"+phone+":code"; //每个手机每天只能发生三次 String count = jedis.get(countKey); if(count == null){ //没有发送次数,第一次发送 //设置发送次数是1 jedis.setex(countKey,24*60*60,"1"); }else if(Integer.parseInt(count)<=2){ //发送次数+1 jedis.incr(codeKey); }else if(Integer.parseInt(count)>2){ //发送三次,不能再次进行发送 System.out.println("不能发送,今天的发送次数已经超过三次。"); jedis.close(); } //发短信到redis里面 String vcode= RandomUtils.getSixCode(); System.out.println(vcode); jedis.setex(codeKey,120,vcode); jedis.close(); } }
package com.mangoubiubiu.utils; import java.util.Random; public class RandomUtils { /** * 禁用构造函数 */ private RandomUtils(){ } /** * 生成6位数的随机验证码 * @return */ public static String getSixCode(){ Random random=new Random(); StringBuilder stringBuilder=new StringBuilder(); for (int i=0;i<6;i++){ //生成10以内的随机数 int nums = random.nextInt(10); stringBuilder.append(nums); } return stringBuilder.toString(); } }
推荐这些文章:
Redis从入门到精通-Redis-事物和锁机制-秒杀案例-基本实现
一、需求
某个产品设置库存时,用户在前端页面点击秒杀按钮,库存数减一。
二、后台逻辑
1、用户id和产品id非空判断
2、通过连接池得到jedis对象3、拼接相关key,库存key 秒杀成功用户key
4、获取库存,如果库存为null则秒杀还未开始
5、通过用户key取val 判断用户操作是否重复秒杀
6、判断如果商品,库存数量小于1,秒杀结束
7、都过了上面的判断校验,正常秒杀
8、记录秒杀成功的用户方便第三步的判断
三、代码实现
package com.atguigu;
import java.io.IOException;
import java.util.HashSet...
Redis从入门到精通-Redis-事物和锁机制-超时和超卖问题解决
一、超卖问题
二、利用乐观锁淘汰用户,解决超卖问题。
三、代码
package com.atguigu;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Transaction;
import java.io.IOException;
import java.util.List;
/**
*
*/
public class SecKill_redis_advance {
public static void ma...
package com.mangoubiubiu;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
public class JqJedisOperate {
public static void main(String[] args) {
HostAndPort hostAndPort = new HostAndPort("192.168.117.134", 6379); //集群随便连接哪个节点都行
JedisCluster j...
String数据类型
命令行
创建获取增减
192.168.1.103:6379> set online-users 50
OK
192.168.1.103:6379> set online-users 100
OK
192.168.1.103:6379> keys *
"online-users"
192.168.1.103:6379> get online-users
"100"
192.168.1.103:6379> incr online-users
(integer) 101
192.168.1.103:6379> decr onlin...
redis setnx命令是当key不存在时设置key但setnx不能同时完成expire设置失效时长,不能保证setnx和expire的原子性.因此可以采用set命令的可选项:set key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置失效时长,单位秒PX milliseconds:设置失效时长,单位毫秒NX:key不存在时设置value,成功返回OK,失败返回(nil)XX:key存在时设置value,成功返回OK,失败返回(nil)set name aa ex 100 nx
ttl 查看剩余过期时间代码package...
Redis所有的命令都可以去官方网站查看
1.基本命令
keys *
查找所有符合给定模式pattern(正则表达式)的 key 。可以进行模糊匹配
del key1,key2,...
删除指定的一批keys,如果删除中的某些key不存在,则直接忽略。被删除的keys的数量
exists key
返回key是否存在。0:key不存在 1:key存在
EXPIRE key seconds
设置key的过期时间,超过时间后,将会自动删除该key。
TTL key
返回key剩余的过期时间。
-1:永不过期
-2:过期或不存在
type key
查看键的类型
Redis中的数据都是以"字符串"形...
案例一
demo为chnx/springboot/redis01
创建springboot项目,导入redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
redis依赖中redis自动装配类为我们自动装配了jedis连接工厂和lettuce连接工厂
整合jedis,使用jedi...
配置文件redis.conf详解
bind=127.0.0.1 # 表示只能在本机中访问redis,将该行注释掉,即可接收任何IP地址的访问
protected-mode # 设置为no,表示关闭保护模式
timeout # 表示一个cli客户端多长时间没有操作时会关闭,设置为0表示永不关闭
tcp-keepalive # 表示多少秒会对客户端进行一次心跳检测
发布和订阅
publish <频道> <message> # redis作为发布者,向一个频...
8.1 完成一个手机验证码功能
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
...
直接撸demo
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clie...
文章链接:https://www.dianjilingqu.com/4295.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。