Jedis操作redis案例(手机验证码验证)

7.Jedis操作Redis6

pom.xml

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

<!-->随机验证码工具<-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.5.15</version>
</dependency>

JedisStudy.java

package redis.jedis;

import org.junit.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JedisStudy {
    public static void main(String[] args) {
        // 创建Jedis对象
        Jedis jedis = new Jedis("101.43.146.65", 6379);
        // 测试连接
        String value =  jedis.ping();
        System.out.println(value);
        // 测试string类型
        // testString(jedis);
        // 测试List类型
        // testList(jedis);
        // 测试Set类型
        // testSet(jedis);
        // 测试Hash类型
        //testHash(jedis);
        // 测试Zset类型
        testZset(jedis);
    }

    // String类型操作
    public static void testString(Jedis jedis){
        // 添加k1的value
        jedis.set("k1", "hello");
        // 获取k1的value
        System.out.println(jedis.get("k1"));
        // 添加k2 k3的value
        jedis.mset("k2", "v2", "k3", "v3");
        // 获取k1 k2 k3的value
        System.out.println(jedis.mget("k1", "k2", "k3"));
        // 获取所有key
        Set<String> keys = jedis.keys("*");
        for(String key : keys){
            System.out.println(key);
        }
        // 取k1是否存在
        System.out.println(jedis.exists("k1"));
        // 获取k1过期时间 -1永不过期
        System.out.println(jedis.ttl("k1"));
    }

    // List类型操作
    public static void testList(Jedis jedis){
        // 删除fruit
        if(jedis.exists("fruit")) jedis.del("fruit");
        // 添加fruit的value
        jedis.lpush("fruit", "apple", "peach", "orange", "banana", "apple");
        // 获取fruit的所有value
        List<String> fruit = jedis.lrange("fruit", 0, -1);
        System.out.println(fruit);
    }
    
    // Set类型操作
    public static void testSet(Jedis jedis){
        // 删除gender
        if(jedis.exists("gender")) jedis.del("gender");
        // 添加gender的value
        jedis.sadd("gender", "woman", "man", "man", "woman", "man");
        // 获取gender的所有value
        Set<String> gender = jedis.smembers("gender");
        System.out.println(gender);
    }
    
    // Hash类型操作
    public static void testHash(Jedis jedis){
        // 删除user
        if(jedis.exists("user")) jedis.del("user");
        // 添加user的value
        jedis.hset("user", "age", "25");
        // 获取user的age
        String hGet = jedis.hget("user", "age");
        System.out.println(hGet);
        // 批量添加user的value
        Map<String, String> map = new HashMap<>();
        map.put("name", "ZhangSan");
        map.put("gender", "man");
        map.put("address", "beijing");
        jedis.hmset("user", map);
        // 获取user的所有value
        List<String> user = jedis.hmget("user","name", "age", "gender", "address");
        System.out.println(user);
    }
    
    // testZset类型操作 
    public static void testZset(Jedis jedis){
        // 删除Top3
        if(jedis.exists("Top3")) jedis.del("Top3");
        // 添加Top3的value
        jedis.zadd("Top3", 100d,"China");
        jedis.zadd("Top3", 80d,"UK");
        jedis.zadd("Top3", 90d,"USA");
        // 获取Top3的value
        Set<String> top3 = jedis.zrange("Top3", 0, -1);
        System.out.println(top3);
    }
}

PhoneCode.java

jedis实现简单验证码验证功能

package redis.jedis;

import cn.hutool.core.util.RandomUtil;
import redis.clients.jedis.Jedis;

public class PhoneCode {
    public static void main(String[] args) {
        //模拟验证码发送
        verifyCode("15610113211");
        //模拟验证码校验
//        getRedisCode("15610113211", "646784");
    }
    //1.生成6位数字验证码
    public static String getCode() {
        return RandomUtil.randomNumbers(6);
    }

    //2. 每个手机每天只能发送三次,验证放在redis中,设置过期时间
    public static void verifyCode(String phone) {
        //连接redis
        Jedis jedis = new Jedis("101.43.146.65", 6379);

        //拼接key
        //手机发送次数
        String countKey = "countKey" + phone;
        //验证码key
        String codeKey = "codeKey" + phone;
        //每个手机只能发送三次
        String count = jedis.get(countKey);
        if (count.equals("")){
            //没有发送次数,说明是第一次发送
            //设置发送次数是1
            jedis.setex(countKey, 24*60*60, "1");
        }else if (Integer.parseInt(count) <= 2) {
            //发送次数 +1
            jedis.incr(countKey);
        }else if (Integer.parseInt(count) > 2) {
            //发送三次,不能再发送了
            Long ttl = jedis.ttl(countKey);
            System.out.println("Verification is frequent, please verify again after " + ttl + " seconds");
            jedis.close();
            return;
        }

        //发送验证码放到 redis 中
        String vscode = getCode();
        jedis.setex(codeKey, 120, vscode);
        String c = jedis.get(countKey);
        Long ttl = jedis.ttl(codeKey);
        System.out.println("phone:" + phone + " code:" + vscode + " count:" + c + " ttl:" + ttl);

        jedis.close();
    }
    //3.验证码校验
    public static void getRedisCode(String phone,String code) {
        //从redis获取验证码
        Jedis jedis = new Jedis("101.43.146.65", 6379);
        //验证码key
        String codeKey = "codeKey"+phone;
        String redisCode = jedis.get(codeKey);
        //判断
        //先判断是否超时
        Long ttl = jedis.ttl(codeKey);
        if(ttl == -2){
            jedis.close();
            System.out.println("Validation timed out");
            return;
        }
        //再判断一致性
        if(redisCode.equals(code)) {
            System.out.println("Validation succeeded");
        }else {
            System.out.println("Incorrect validation");
        }
        jedis.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值