1、Jedis所需要的jar包

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

2、连接Redis注意事项

禁用Linux的防火墙:Linux(CentOS7)里执行命令
systemctl stop/disable firewalld.service
redis.conf中注释掉bind 127.0.0.1 ,然后protected-mode no
开启redis-server [root@localhost ~]# /usr/local/bin/redis-server /etc/redis.conf

3、测试连接

1、创建测试程序

package com.manster.jedis;

import redis.clients.jedis.Jedis;

/**
 * @Author manster
 * @Date 2021/5/14
 **/
public class JedisDemo1 {

    public static void main(String[] args) {
        //创建Jedis对象
        Jedis jedis = new Jedis("192.168.75.11",6379);
        String ping = jedis.ping();
        System.out.println(ping);
    }

}

结果为:
PONG

4、测试相关数据类型

1、测试 string

    @Test
    public void demo1(){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        jedis.set("score1","88");
        jedis.set("score2","98");
        jedis.set("score3","68");
        Set<String> keys = jedis.keys("*");
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());

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

输出结果为:
score2
score3
score1
true
-1
88

2、测试 list

    @Test
    public void demo2(){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        jedis.lpush("k1","v1","v2","v3");
        List<String> k1 = jedis.lrange("k1", 0, -1);
        System.out.println(k1);
    }

输出结果为:
[v3, v2, v1]

3、测试 set

    @Test
    public void demo3(){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        jedis.sadd("name","张三","李四");
        Set<String> name = jedis.smembers("name");
        Iterator<String> iterator = name.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

输出结果为:
张三
李四

4、测试 hash

    @Test
    public void demo4(){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        jedis.hset("h1","username","manster");
        System.out.println(jedis.hget("h1","username"));
    }

输出结果为:
manster

5、测试 zset

    @Test
    public void demo5(){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        jedis.zadd("china",100,"beijing");
        System.out.println(jedis.zrange("china", 0, -1));
    }


输出结果为:
[beijing]

5、实例

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

package com.manster.jedis;

import redis.clients.jedis.Jedis;

import java.util.Random;

/**
 * @Author manster
 * @Date 2021/5/15
 **/
public class VerifyCode {

    public static void main(String[] args) {
        //获取验证码
        verifyCode("1249041911");
        //进行校验
        //getRedisCode("1249041911","123456");

    }

    //获取随机的6为验证码
    public static String getCode(){
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int num = random.nextInt(10);
            sb.append(num);
        }
        return String.valueOf(sb);
    }

    //控制校验次数
    public static void verifyCode(String phone){
        Jedis jedis = new Jedis("192.168.75.11",6379);

        String countKey = phone + "count";
        String codeKey = phone + "code";

        String count = jedis.get(countKey);
        if(count == null){
            //第一次发送,存入计数的key
            jedis.setex(countKey, 24*60*60, "1");
        } else if (Integer.parseInt(count) <= 2){
            //当请求次数小于3次时,计数+1
            jedis.incr(countKey);
        } else {
            //三次都不正确
            System.out.println("今天的三次机会已经使用完了,请明天再来");
        }

        //将生成的验证码存入redis
        String vcode = getCode();
        //有效期为120s
        jedis.setex(codeKey, 120 , vcode);
        jedis.close();
    }

    //校验验证码
    public static void getRedisCode(String phone, String code){
        Jedis jedis = new Jedis("192.168.75.11",6379);
        String codeKey = phone + "code";
        String countKey = phone + "count";
        //从redis中得到验证码
        String redisCode = jedis.get(codeKey);
        if (redisCode == null){
            System.out.println("请先获取验证码");
            return;
        }
        if(redisCode.equals(code)){
            System.out.println("验证成功");
            //成功后直接删除
            jedis.del("codeKey");
            jedis.del("countKey");
        } else {
            System.out.println("验证失败");
        }

        jedis.close();
    }

}

第一次获取验证码

   public static void main(String[] args) {
        //获取验证码
        verifyCode("1249041911");
        //进行校验
        //getRedisCode("1249041911","123456");

    }

redis中所存储的数据

127.0.0.1:6379> keys *
1) "1249041911count"
2) "1249041911code"
127.0.0.1:6379> get 1249041911code
"782575"
127.0.0.1:6379> get 1249041911count
"1"

提交验证码

   public static void main(String[] args) {
        //获取验证码
        //verifyCode("1249041911");
        //进行校验
        getRedisCode("1249041911","782575");

    }


验证成功

提交验证码

   public static void main(String[] args) {
        //获取验证码
        //verifyCode("1249041911");
        //进行校验
        getRedisCode("1249041911","123456");

    }

验证失败

再获取三次验证码

   public static void main(String[] args) {
        //获取验证码
        verifyCode("1249041911");
        //进行校验
        //getRedisCode("1249041911","123456");

    }

今天的三次机会已经使用完了,请明天再来