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集群方案
Jun 21 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
Redis中有序集合的内部实现方式的详细介绍
Mar 16 Redis
Redis安装使用RedisJSON模块的方法
Mar 23 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
一文搞懂Redis中String数据类型
Apr 03 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 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
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
php实现购物车功能(上)
2020/07/23 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
Python 除法小技巧
2008/09/06 Python
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python实现网站表单提交和模板
2019/01/15 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
类和结构的区别
2012/08/15 面试题
母婴店促销方案
2014/03/05 职场文书
岗位说明书怎么写
2014/07/30 职场文书
2015年护士节慰问信
2015/03/23 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书