1. 作用

Jedis: 通过Java操作redis

2. 测试连接

1. step1:项目pom文件引入引用

  1. <dependencies>
  2. <dependency>
  3. <groupId>redis.clients</groupId>
  4. <artifactId>jedis</artifactId>
  5. <version>3.2.0</version>
  6. </dependency>
  7. </dependencies>

2. step2: 编写测试类,测试连通性

public class JedisDemo1 {
  public static void main(String[] args) {
      // 创建jedis对象
      Jedis jedis = new Jedis("127.0.0.1",6379);

      // 测试
      String value=jedis.ping();
      System.out.println(value);
  }
}

3. 测试相关数据类型

3.1 keys

获取所有的key集合

  @Test
  public void test(){
      // 创建jedis对象
      Jedis jedis = new Jedis("127.0.0.1",6379);
      // 测试1: 查找所有的key
      Set<String> keys = jedis.keys("*"); //set集合
      for (String key : keys) {
      System.out.println(key);
    }
  }
}

遍历结果:

unique:users:20201104
unique:users:20201103
users:20210101

3.2 set/get/exists/ttl

3.2.1 step1: 清空数据库

flushdb

3.2.2 step2: set/mset

// 创建jedis对象
      Jedis jedis = new Jedis("127.0.0.1",6379);

      // set()
      jedis.set("name", "lucy");
      // get()
      String name = jedis.get("name");
 // mset()
      jedis.mset("name","zhangSan","age","18","gender","female");

// mget()
      List<String> strings = jedis.mget("name", "age", "gender");
    for (String string : strings) {
      System.out.println(string);
    }

输出:

zhangSan
18
female

4. Jedis模拟验证码发送

4.1 要求

1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次

4.2 实现过程 分析

step1: 生成随机的6个数字的验证码: Random类
step2: 2分钟内有效: 把验证码放入redis中,设置过期时间是120s
step3: 验证码是否相同: 从redis中取出来与输入的比较,判断是否相同;
step4: 每个手机每天只能发送3次验证码: redis中incr操作, 每次发送后+1, 当大于2时,提示不能发送了。

4.3 代码实现

step1: 产生随机的验证码

/**
     * 生成一个6位数的验证码
     * @return
     */
    public static String getCode(){
        Random random = new Random();
        StringBuilder code = new StringBuilder();
        for(int i=0;i<6;i++){
            // 10以内的int
            int rand = random.nextInt(10);
            code.append(rand);
        }
        return code.toString();
    }

step2: 将验证码放入redis中并设置过期时间和每天3次,每次120s的限定
核心代码:
设置每天的次数: jedis.setex(countKey, 246060, “1”);
设置每次过期时间:jedis.setex(codeKey, 120, vCode);

/**
     * 把验证码存入redis中,要求:1)每个手机号每天最多3次;2)每次验证过期时间是120s
     * @param phone
     * @param code
     */
    public static void verifyCode(String phone, String code){
        // 创建jedis对象
        Jedis jedis = new Jedis("127.0.0.1",6379);
        // 拼接key
        // 手机发送次数的key 和 验证码的key
        String countKey = "VerifyCode"+phone+":count";
        String codeKey = "VerifyCode"+phone+":code";
        // 每个手机每天三次
        String count = jedis.get(countKey);
        if (count==null){
            // 没有发送次数,说明是第一次发送
            jedis.setex(countKey, 24*60*60, "1");
        }else{
            if(Integer.parseInt(count)<=2){
                // 发送次数+1,即在countKey数值基础上+1
                jedis.incr(countKey);
            }else if((Integer.parseInt(count))>2){
                // 证明发送了3次
                System.out.println("今天的发送次数超过了3次,不能再发送了!");
                jedis.close();
            }
        }

        // 发送的验证码放到redis中去
        String vCode = getCode();
        jedis.setex(codeKey, 120, vCode);
        jedis.close();
    }

step3: 验证码校验

/**
     * 验证码校验
     * @param phone
     * @param code
     */
    public static void getRedisCode(String phone,String code){
        Jedis jedis = new Jedis();
        String codeKey = "VerifyCode"+phone+":code";
        String redisCode = jedis.get(codeKey);
        // 判断
        if(redisCode.equals(code)){
            System.out.println("成功");
        }else {
            System.out.println("失败!");
        }
        jedis.close();

    }