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

news/2023/5/28 7:49:46

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.exyb.cn/news/show-4571257.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

SAP 应付暂估分科目核算

在SAP 实施项目中&#xff0c;对于应付暂估科目通常会要求做一个区分&#xff0c;比如按服务&#xff0c;材料&#xff0c;或公司间等不同的需求进行区分。但在SAP 的标准功能中&#xff0c;WRX 的事务是不能区分的&#xff0c;那这里需要进行增强。 增强的方式有两种&#xf…

金蝶K3采购暂估案例教程1月初一次冲回

目录 实验环境 案例背景 工业模式采购暂估流程图 后台参数配置 凭证模板设置 案例物料编码 采购订单 外购入库单 当月外购入库估价处理 当月生成凭证 外购入库估价入账&#xff08;票未到&#xff09; 当月结账 次月收到采购发票 次月外购入库拆分数量 次月发票钩稽 次月外购入…

金蝶K3采购暂估案例教程3差额调整

目录 实验环境 案例背景 后台参数配置 后台凭证模板设置 案例物料编码 采购订单 外购入库单 当月外购入库估价处理 当月生成凭证 外购入库单&#xff08;单据直接生成&#xff09; 当月结账 次月收到采购发票 次月发票钩稽&#xff08;发票与外购入库关联&#xff09; 次月外购…

期初暂估导入报表查看

应付暂估科目是不挂供应商的&#xff0c;但是期初需要导入&#xff0c;发票的时候需要手工清账。因此对暂估的取数需要三部分。 1 正常的&#xff0c;可以直接取到供应商 2 期初导入的&#xff0c;供应商代码维护在分配的地方。 3 手工MIRO 做发票&#xff0c;通过对方科目取…

SAP License:GR/IR和暂估入库设计思路的简单对比

第五节 GR/IR科目 相关Tcode:OBYP|F.19|F.13|MB5S|MR11|MR11SHOW 有个家伙说谁能帮他整明白GR/IR&#xff0c;就免费为谁干两天“苦力”,我猪圈正有几头猪要弄到屠宰场,所以很想请他帮忙扛过去。 什么是 GR/IR? GR/IR 英文全称是Goods Receipt/Invoice Receipt,和中国的物资…

SAP License:如何建立应付暂估明细查询

应付暂估的明细查询还是很麻烦的一件事情&#xff0c;系统本身并不提供相关功能。其开发源代码如下&#xff1a; *———————————————————————* * Report ZRFI0950 * Created By : SAP方丈 * * Creat…

NetSuite应付暂估报表

上海疫情防控升级到了足不出户的程度&#xff0c;看了很多视频、文字&#xff0c;大家给上海加油&#xff01;在这种大事件中&#xff0c;无他法&#xff0c;仅能做到照顾好家人&#xff0c;不抱怨&#xff0c;积极文字&#xff0c;以身作则而已。身修而家园清净&#xff0c;守…

[财务]暂估业务处理流程

单到回冲 暂估业务处理流程 一、暂估业务基本知识 1、什么是暂估成本 暂估成本是指采购系统所购存货已入库&#xff0c;但发票未到或未报销时入库单上的估算成本&#xff1b;当已报销后&#xff0c;需进行成本处理。 2、暂估入库成本处理的三种方式&#xff1a; 1&#xf…

UART 波特率选择的认识与理解

笔者前几天碰到了串口波特率的问题&#xff0c;想要1M以上的波特率&#xff0c;发现波特率总是乱码&#xff0c;常用标准的几种波特率也不是很好用。 1、UART时钟情况说明 ch340G模块&#xff0c;时钟为12MHZ。 某PMC开发板&#xff0c;ARM Coretex A53内核&#xff0c;主频…

PlatformIO开发环境下修改串口监视器的波特率

PlatformIO开发环境下修改串口监视器的波特率最傻瓜快捷设置方式&#xff1a;在platformio.ini文件里面添加一句&#xff1a;monitor_speed 115200即可。 [env:nodemcuv2] platform espressif8266 board nodemcuv2 framework arduino monitor_speed 115200以下是手动设置…

iOS上架appstore详细教材

假如你用原生xcode开发&#xff0c;上架是相对简单。 但假如是用hbuilderx这些uniapp框架开发&#xff0c;没有mac电脑&#xff0c;没有xcode&#xff0c;那么还能上架吗&#xff1f;是可以的&#xff0c;你看完这篇文章&#xff0c;就知道如何在没有mac电脑的情况下&#xff…

Android系统学习(二)------修改串口波特率

你好&#xff01;这里是风筝的博客&#xff0c; 欢迎和我一起交流。 之前&#xff0c;我们把rk3399的安卓源码编译好之后&#xff0c;插上USB转串口模块想进行调试以及查看启动log&#xff0c;发现是乱码&#xff0c;看了wiki后发现串口波特率是1500000&#xff0c;波特率很高…

【奇葩瑞萨-002】调教Renesas RX130独立看门狗

调教Renesas RX130独立看门狗概述过程程序内容不喂狗喂狗一次连续喂狗总结分析概述 瑞萨RX130的看门狗&#xff0c;配置后必须要喂狗一次&#xff0c;才能激活狗&#xff1b;否则狗就不工作。 过程 今天在调试瑞萨RX130的片上IWDG。使用CS的Code Generator自动生成外设初始化…

瑞萨e2studio(8)----PWM

瑞萨e2studio.8--PWM概述视频教学csdn课程样品申请硬件准备新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置选择定时器开发板PWM(脉冲宽度调制)定时器管脚配置管脚定义定时器配置工程文件R_GPT_Open()函数原型R_GPT_Start()函数原型R_GPT_PeriodSet()函数原型R_GPT_…

e2studio瑞萨笔记——ADC单次扫描多渠道

一.搭建工程 二.配置 1.时钟设置 2.uart配置 点击Stacks->New Stack->Connectivity->UART on r_sci_uart &#xff08;1&#xff09;uart配置属性 Name g_uart9 名字 Channnel 9 通道 Data Bits 8bits 数据位 Parity None 无校验 Baud Rate…

瑞萨E1/E20烧录工具自检方法

E1/E20是瑞萨官方烧录工具&#xff0c;可将固件烧录到瑞萨MCU芯片中。 瑞萨官方提供了检测E1/E20烧录工具好坏的软件&#xff1a;[CC] E1,E20 Self Check Program&#xff0c;安装CS后自动安装&#xff0c;如下所示&#xff1a; 将14pin接口电缆连接在一起&#xff0c;如下图所…

Android 图片添加水印

拍照或者本地图片添加水印&#xff0c;效果图&#xff1a; 添加水印方法&#xff1a; /*** param src 添加水印的图片* param title 水印文字* return*/public Bitmap createBitmap(Bitmap src, String title) {if (src null) {return src;}Bitmap bitmap src;// 获取原…

未来教育计算机二级office评分有问题,未来教育计算机二级-未来教育计算机二级msoffice题库评分 – 手机爱问...

2014-03-25未来教育计算机二级做完后评分显示“运行引起"activex部件不能创建对象"的原因会有很多,你试试下面这个方法吧,重新将组件注册一下。用记事本建一个123。bat的批处理文件,然后运行一下,文件内容如下:echo 正在修复&#xff0c;这个过程可能需要几分钟&…

mysql中的cube和rollup_总结一下用sql的cube和rollup实现汇总小计

做数据统计时&#xff0c;经常会有汇总小计的需求&#xff0c;要实现这样的需求有很多种方案&#xff0c;可以在用sql、也可以用DataTable在C#代码里实现汇总。本文介绍一下用sql实现方法。具我所知&#xff0c;sql里面要实现汇总小计可以用compute&#xff0c;也可以group by …

Ubuntu18.04配置Cube-SLAM

Code&#xff1a;https://github.com/shichaoy/cube_slam Notes&#xff1a;本文描述笔者再Ubuntu18.04安装Cube-SLAM遇到的相关问题和解决方法。 配置相关问题或者Object SLAM相关科研问题欢迎通过邮件联系笔者交流&#xff1a;lidong8421bcdgmail.com&#xff08;基本保证两…