Redis6学习笔记【part4】Jedis-API与手机验证码功能实现

news/2024/11/17 12:44:57/

1.连接 Jedis

第一步,修改 redis 的配置,以允许外网 ip 访问 redis。

在 redis.conf 中注释掉 bind 127.0.0.1 ,并修改 protected-mode no 。

第二步,导入依赖。

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version>
</dependency>

第三步,创建测试程序,测试连通性。

    @Testpublic void jedis_test(){Jedis jedis = new Jedis("hadoop100",6379);String pong = jedis.ping();System.out.println(pong);jedis.close();}//返回 PONG,代表成功连通。

注:记得禁用 Linux 的防火墙,否则 ping不通。在 Linux(CentOS7) 里执行命令systemctl stop firewalld.servicesystemctl disable firewalld.service


2.用 Jedis-API 操作相关数据类型

① Key

    @Testpublic void test_String(){Jedis jedis = new Jedis("hadoop100",6379);//获取key对应的值System.out.println(jedis.get("k1"));//获取所有keySet<String> keys = jedis.keys("*");//输出key的数量System.out.println(keys.size());//判断key存不存在System.out.println(jedis.exists("k1"));//获取key的ttl值System.out.println(jedis.ttl("k1"));}

② String

    @Testpublic void test_String(){Jedis jedis = new Jedis("hadoop100",6379);//一次放一个jedis.set("k1","v1");jedis.set("k2","v2");jedis.set("k3","v3");//一次放多个jedis.mset("str1","v1","str2","v2","str3","v3");//批量获取key对应的值System.out.println(jedis.mget("str1","str2","str3"));}

③ List

    @Testpublic void test_List(){Jedis jedis = new Jedis("hadoop100",6379);//放入list类型的键值对,一个键可以放入多个值jedis.lpush("list","v1","v2","v3","v4");//获取list的全部值List<String> list = jedis.lrange("list", 0, -1);for (String str : list) {System.out.println(str);}}

④ Set

    @Testpublic void test_Set(){Jedis jedis = new Jedis("hadoop100",6379);//将一个或多个 member 元素加入到集合 key 中jedis.sadd("orders","order01");jedis.sadd("orders","order02");jedis.sadd("orders","order03");jedis.sadd("orders","order04");//取出该集合的所有值Set<String> smembers = jedis.smembers("orders");for (String order : smembers) {System.out.println(order);}//删除集合中的某个元素jedis.srem("orders","order04");}

⑤ Hash

    @Testpublic void test_Hash(){Jedis jedis = new Jedis("hadoop100",6379);//给集合中的键赋值jedis.hset("hash1","userName","parker");//从集合取出valueSystem.out.println(jedis.hget("hash1","userName"));//用map来给集合中的键赋值Map<String,String> map = new HashMap<>();map.put("name","parker");map.put("number","7");map.put("age","20");jedis.hmset("hash2",map);//以map形式从集合取出valueList<String> result = jedis.hmget("hash2", "name", "number");for (String element : result) {System.out.println(element);}}

⑥ Zset

    @Testpublic void test_Zset(){Jedis jedis = new Jedis("hadoop100",6379);//将一个或多个 member 元素及其 score 值加入到有序集 key 当中jedis.zadd("animalSet",100d,"pig");jedis.zadd("animalSet",200d,"dog");jedis.zadd("animalSet",300d,"cat");jedis.zadd("animalSet",500d,"rabbit");//获取key对应有序集合的所有值Set<String> animals = jedis.zrange("animalSet", 0, -1);for (String animal : animals) {System.out.println(animal);}}

3.Redis + Jedis 实现手机验证码功能

需求分析:

1、输入手机号,点击发送后随机生成6位数字码,2分钟有效

2、输入验证码,点击验证,返回成功或失败

3、每个手机号每天只能输入3次

代码实现:

第一步,生成一个6位数字码。

    //1.生成一个6位数字码public static String getCode() {Random random = new Random();String code = "";for (int i = 0; i < 6; i++) {int rand = random.nextInt(10);code += rand;}return code;}a

第二步,发送验证码。

    //2.每个手机每天只能发送三次,验证码放入redis中,并设置过期时间public static void sendCode(String phone){//连接redisJedis jedis = new Jedis("hadoop100",6379);//创建key//①手机发送次数keyString countKey = "PhoneCode"+phone+":count";//②验证码keyString codeKey = "PhoneCode"+phone+":code";//每个手机每天只能发送三次String count = jedis.get(countKey);if(count == null){  //没有发送次数,第一次发送//设置发送次数为1jedis.set(countKey,"1");}else if(Integer.parseInt(count) <= 2){//发送次数+1jedis.incr(countKey);}else if(Integer.parseInt(count) > 2){//发送满3次,不能再发送System.out.println("今天发送次数已经超过三次,不能再发送");//关闭redisjedis.close();return;}//发送验证码并放到redis里String vcode = getCode();jedis.setex(codeKey,60*60*24,vcode);jedis.close();System.out.println("成功发送");}

第三步,校验验证码。

    //3.验证码校验public static void verifyCode(String phone,String code){//从redis获取验证码Jedis jedis = new Jedis("hadoop100",6379);//创建手机发送次数keyString codeKey = "PhoneCode"+phone+":code:";String redisCode = jedis.get(codeKey);if(redisCode.equals(codeKey)){System.out.println("验证成功");}else {System.out.println("验证失败");}}

第四步,模拟发送手机验证码。

public class PhoneCode {public static void main(String[] args) {//模拟验证码发送sendCode("13812345678");sendCode("13812345678");sendCode("13812345678");sendCode("13812345678");}
}

打印结果如下:

成功发送
成功发送
成功发送
今天发送次数已经超过三次,不能再发送

查看 redis,可以知道验证码为387393。

在这里插入图片描述

第五步,模拟校验验证码。

public class PhoneCode {public static void main(String[] args) {//模拟校验验证码verifyCode("13812345678","387393");verifyCode("13812345678","387396");}
}

打印结果如下

验证成功
验证失败

http://www.ppmy.cn/news/247656.html

相关文章

【管理篇 / 诊断】❀ 01. 了解防火墙的性能参数 ❀ FortiGate 防火墙

【简介】在选择购买飞塔防火墙的时候&#xff0c;我们会经常疑惑&#xff0c;到底什么样的型号才适合。型号选过了&#xff0c;大炮打蚊子&#xff0c;浪费银两&#xff0c;型号选小了&#xff0c;过不多久就又卡又慢&#xff0c;被BOSS骂得狗血淋头。到底怎么选&#xff0c;先…

规则引擎—Drools 语法第一天[学习笔记]

1.为什么要用规则引擎&#xff1f; eg:商场商品打折(逻辑与规则如下表) 规则编号购买总金额折扣1total<1000.92100< total <5000.83total>5000.7 正常思维如何实现以上逻辑&#xff1f;无非就是if-else分支来判断。 //伪代码 if(total < 100) { total * 0…

绕开500D收费简历制作的关卡

写在前面环境准备开始吧 制作简历获取pdf修修补补结果展示 总结 写在前面 又到了一年一度准备简历的时候了&#xff0c;一个布局优美&#xff0c;样式良好的简历无疑是加分项。但这要实现起来却很难。 大部分人都是在网上随便下载一个简历模板&#xff0c;涂涂改改&#xff…

Paddle进阶实战系列(一):保险文本视觉认知问答

✨写在前面:强烈推荐给大家一个优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。 保险文本视觉认知问答 1.项目介绍 1.1背景 随着人…

五百丁简历下载的一种方法

为了下载自己在五百丁上的简历&#xff0c; 下面将分享一个油猴脚本&#xff0c;重新实现下载。 思路如下&#xff1a; 调用jQuery.print.js这个包对网页进行打印&#xff0c;将打印出来的PDF保存即可。 代码如下&#xff1a; // UserScript // name 五百丁简历下载 /…

【博客642】relabeling in Prometheus and VictoriaMetrics

如何在Prometheus和VictoriaMetrics中使用relabel relabel function Adding new labelUpdating existing labelRewriting existing labelUpdating metric nameRemoving unneeded labelsRemoving unneeded metricsDropping metrics on certain conditionModifying label names…

史密斯热水器 保养灯亮闪烁

1.就是镁棒快没了。 2.史密斯自己称作智能镁棒&#xff0c;就是外面多一个接线柱。 3.网购一根&#xff0c;原来的比较难拆&#xff0c;锈住了&#xff0c;买瓶去去锈剂,边振动边喷边拆才能拆下。 4.换上新的镁棒后&#xff0c;还是会报保养灯亮闪烁。 5.史密斯保养灯复位&…