Redis-Jedis

导读:本篇文章讲解 Redis-Jedis,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Redis-Jedis

1.Jedis所需要的jar包

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

禁用Linux的防火墙:Linux(CentOS7)里执行命令

systemctl stop/disable firewalld.service

redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no

2.Jedis常用操作

1.创建maven工程

image-20220821183845621

3.Jedis相关API

1.建立连接

public class CreatConnection {
    public static void main(String[] args) {
        //连接连接
        Jedis jedis = new Jedis("192.168.79.201",6379);
        //检测连接
        String pong = jedis.ping();
        System.out.println("连接成功:"+pong);
        //关闭连接
        jedis.close();
    }
}

2.Jedis-API: Key

public class JedisKey {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        jedis.set("k1", "v1");
        jedis.set("k2", "v2");
        jedis.set("k3", "v3");
        //获取所有的key
        Set<String> keys = jedis.keys("*");
        System.out.println(keys.size());
        System.out.println(keys);
        //key是否存在 true
        System.out.println(jedis.exists("k1"));
        //-1表示永不过期,-2表示已过期 具体的秒数表示剩余过期时间
        System.out.println(jedis.ttl("k1"));
        System.out.println(jedis.get("k1"));
        jedis.close();
    }
}

3.Jedis-API: String

public class JedisString {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        jedis.mset("str1","v1","str2","v2","str3","v3");
        System.out.println(jedis.mget("str1","str2","str3"));
        jedis.close();
    }
}

4.Jedis-API: List

public class JedisList {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        jedis.lpush("mylist","张三","王五","李白");
        //按照索引下标获得元素(从左到右)
        //lrange <key><start><stop>
        //0左边第一个,-1右边第一个,(0到-1表示获取所有)
        //lrange mylist 0 -1
        //李白, 王五, 张三
        List<String> list = jedis.lrange("mylist",0,-1);
        System.out.println(list);
        for (String element : list) {
            System.out.println(element);
        }
        jedis.close();
    }
}

5.Jedis-API: set

public class JedisSet {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        //将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
        jedis.sadd("orders", "order01");
        jedis.sadd("orders", "order02");
        jedis.sadd("orders", "order03");
        jedis.sadd("orders", "order04");
        jedis.sadd("orders", "order01");
        Set<String> smembers = jedis.smembers("orders");
        //[order02, order03, order04, order01]
        System.out.println(smembers);
        jedis.srem("orders", "order02");
        //[order03, order04, order01]
        System.out.println(jedis.smembers("orders"));
        jedis.close();
    }
}

6.Jedis-API: hash

public class JedisHash {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        //给<key>集合中的  <field>键赋值<value>
        jedis.hset("hash1","userName","lisi");
        //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);
        //[13810169999, abc@163.com]
        List<String> result = jedis.hmget("hash2", "telphone","email");
        System.out.println(result);
    }
}

7.Jedis-API: zset

/**
 * Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
 *
 * 不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
 *
 * 因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
 *
 * 访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
 */
public class JedisZset {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.79.201",6379);
        //将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
        jedis.zadd("zset01", 100d, "z3");
        jedis.zadd("zset01", 90d, "l4");
        jedis.zadd("zset01", 80d, "w5");
        jedis.zadd("zset01", 700d, "z6");
        //[w5, l4, z3, z6]
        List<String> zrange  = jedis.zrange("zset01", 0, -1);
        System.out.println(zrange);
        jedis.close();
    }
}

4.手机验证码案例

需求:

1、输入手机号,点击发送后随机生成6位数字码,2分钟有效

2、输入验证码,点击验证,返回成功或失败

3、每个手机号每天只能输入3次

image-20220821184646866

/**
 * 1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
 * 2、输入验证码,点击验证,返回成功或失败
 * 3、每个手机号每天只能输入3次
 */
public class JedisVerificationCodeDemo {
    public static void main(String[] args) {
        //模拟验证码发送
        verifyCode("13678765435");

        //模拟验证码校验
        getRedisCode("13678765435","4444");

    }


    /**
     * 生成验证码
     * @param phone
     */
    private static void verifyCode(String phone) {
        Jedis jedis = new Jedis("192.168.79.201", 6379);
        String countKey = "verifyCode" + phone + ":count";
        String count = jedis.get(countKey);
        if (count == null || "".equals(count)) {
            jedis.setex(countKey,24*60*60,"1");
        }else if(Integer.parseInt(count)<=2){
            //+1
            jedis.incr(countKey);
        }else if(Integer.parseInt(count)>2) {
            jedis.close();
            throw new RuntimeException("今天的发送次数已经超过三次");
        }
        //生成6位的验证码
        String code = RandomUtils.getSixBitRandom();
        System.out.println("生成验证码:"+code);
        String codeKey = "verifyCode" + phone + ":code";
        //设置验证码两分钟有效
        jedis.setex(codeKey,120,code);
        jedis.close();
    }

    /**
     * 校验验证码
     * @param phone
     * @param code
     */
    private static void getRedisCode(String phone,String code) {
        //从redis获取验证码
        Jedis jedis = new Jedis("192.168.79.201",6379);
        //验证码key
        String codeKey = "verifyCode"+phone+":code";
        String redisCode = jedis.get(codeKey);
        //判断
        if(redisCode.equals(code)) {
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }

}

生成验证码工具类

/**
 * 生成四位和六位的随机数字
 */
public class RandomUtils {

   private static final Random random = new Random();

   private static final DecimalFormat fourdf = new DecimalFormat("0000");

   private static final DecimalFormat sixdf = new DecimalFormat("000000");

   public static String getFourBitRandom() {
      return fourdf.format(random.nextInt(10000));
   }

   public static String getSixBitRandom() {
      return sixdf.format(random.nextInt(1000000));
   }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81240.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!