Jedis操作Redis实现模拟验证码发送功能


Posted in Redis onSeptember 25, 2021

jedis的创建

1.先启动redis 如果报

Jedis操作Redis实现模拟验证码发送功能

那么说明你redis服务器服务器端还没打开

//启动服务端
redis-server /etc/redis.conf
//启动客户端
redis-cli

如果启动成功,就是这样

Jedis操作Redis实现模拟验证码发送功能

2.创建一个maven工程

导入Jedis依赖

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

3.创建一个class

public class JedisDemo1 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("xx.xxx.xx.xx",6379);
        //如果redis配置了密码就在这里输入不然会连接失败
        jedis.auth("xxxx");
        String value = jedis.ping();
        System.out.println(value);
    }
}

如果是第一次连接会很大概率报错

Jedis操作Redis实现模拟验证码发送功能

这时候有两种方法第一种是关闭防火墙,但是这种不太好,其实只要开放6379端口连接就可以了

jedis实现模拟验证码

public class PhoneCode {
    public static void main(String[] args) {

            verifyCode("12345678900");
            //校验验证码是否正确
//            GetRedisCode("12345678900","940487");
    }

    //1.生成六位验证码
    public static String getCode(){
        Random random = new Random();
        String Code = "";
        for (int i = 0; i < 6; i++) {
            int i1 = random.nextInt(10);
            Code = Code +i1;
        }
        return Code;
    }

    //2.每个手机每天只能发三次,验证码放到redis中,设置过期时间
    public static void verifyCode(String phone){
        //连接redis
        Jedis jedis = new Jedis("172.18.17.215",6379);
        jedis.auth("1052600676");
        //先自定义两个key,从而通过后面步骤给key赋一个value
        //手机发送次数
        String CountKey = phone+"count";
        //验证码key
        String CodeKey = phone + "code";

        //每个手机每天只能发送三次
        //通过key查看是否有value
        String count = jedis.get(CountKey);
        if (count == null){
            //没有发送次数,说明是第一次发送,那就设置发送次数为1
            jedis.setex(CountKey,24*60*60,"1");
        }else if (Integer.parseInt(count) <= 2){
            jedis.incr(CountKey);
        }else if (Integer.parseInt(count) > 2){
            System.out.println("验证码超过三次,无法发送");
            jedis.close();
            return;
        }

        //设置过期时间
        //value
        String codee = getCode();

        jedis.setex(CodeKey,120,codee);
        jedis.close();

    }

    //3.验证码校验
    public static void GetRedisCode(String phone,String code){
        //连接redis
        Jedis jedis = new Jedis("172.18.17.215",6379);
        jedis.auth("1052600676");

        //验证码key
        String CodeKey = phone + "code";
        String RedisCode = jedis.get(CodeKey);

        if (RedisCode.equals(code)){
            System.out.println("成功");
        }else{
            System.out.println("失败");
        }
        jedis.close();
    }

}

通过这些操作实现验证码发送

Jedis操作Redis实现模拟验证码发送功能

超过三次

Jedis操作Redis实现模拟验证码发送功能

相关数据类型测试

Key

jedis.set("k1", "v1");
	jedis.set("k2", "v2");
	jedis.set("k3", "v3");
		
	Set<String> keys = jedis.keys("*");

	System.out.println(keys.size());

	for (String key : keys) {
		System.out.println(key);
	}

	System.out.println(jedis.exists("k1"));
	System.out.println(jedis.ttl("k1"));                
	System.out.println(jedis.get("k1"));

String

jedis.mset("str1","v1","str2","v2","str3","v3");
	
	System.out.println(jedis.mget("str1","str2","str3"));

List

List<String> list = jedis.lrange("mylist",0,-1);
	
	for (String element : list) {
		System.out.println(element);
	}

set

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", "order02");

hash

jedis.hset("hash1","userName","lisi");
	System.out.println(jedis.hget("hash1","userName"));
	
	Map<String,String> map = new HashMap<String,String>();
	
	map.put("telphone","13810169999");
	map.put("address","atguigu");
	map.put("email","abc@163.com");
	
	jedis.hmset("hash2",map);
	
	List<String> result = jedis.hmget("hash2","telphone","email");
	
	for (String element : result) {
		System.out.println(element);
	}

zset

jedis.zadd("zset01", 100d, "z3");
	jedis.zadd("zset01", 90d, "l4");
	jedis.zadd("zset01", 80d, "w5");
	jedis.zadd("zset01", 70d, "z6");
 
	Set<String> zrange = jedis.zrange("zset01", 0, -1);
	
	for (String e : zrange) {
		System.out.println(e);
	}

到此这篇关于Jedis操作Redis实现模拟验证码发送的文章就介绍到这了,更多相关Redis验证码发送内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
Redis安装启动及常见数据类型
Apr 14 Redis
redis实现共同好友的思路详解
May 26 Redis
Redis缓存-序列化对象存储乱码问题的解决
Jun 21 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
redis数据结构之压缩列表
Mar 21 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
Redis基本数据类型哈希Hash常用操作命令
Jun 01 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
Redis主从复制操作和配置详情
Sep 23 Redis
为什么RedisCluster设计成16384个槽
使用redis生成唯一编号及原理示例详解
Sep 15 #Redis
Redis读写分离搭建的完整步骤
Sep 14 #Redis
在项目中使用redis做缓存的一些思路
Redis RDB技术底层原理详解
Sep 04 #Redis
使用redis实现延迟通知功能(Redis过期键通知)
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 #Redis
You might like
解决File size limit exceeded 错误的方法
2013/06/14 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php创建无限级树型菜单
2015/11/05 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
PHP PDO操作总结
2014/11/17 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
express.js中间件说明详解
2019/03/19 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
python主要用于哪些方向
2020/07/05 Python
傲盾软件面试题
2015/08/17 面试题
C#面试常见问题
2013/02/25 面试题
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
矫正人员思想汇报
2014/01/08 职场文书
企业宣传方案
2014/03/04 职场文书
志愿者个人总结
2015/03/03 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript