【Reids 学习】Java 客户端 Jedis 学习

Jedis: 一款 java 操作 redis 数据库的工具,类似于 JDBC

一、使用步骤

引入依赖:

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

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

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

否则无法连接:
在这里插入图片描述
在这里插入图片描述

public class Demo1 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.176.128",6379);
        String ping = jedis.ping();
        System.out.println("连接成功:" + ping);
        jedis.close();
    }
}

在这里插入图片描述

public class RedisTest {
    @Test
    public void test() {
//        1. 获取连接
        Jedis jedis = new Jedis("localhost", 6379);
//        2. 操作
        jedis.set("username", "zhangsan");
//        3. 关闭连接
        jedis.close();
    }
}

二、Jedis 操作各种 Redis 中的数据结构

  1. 字符串类型 string:set/get
 //1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
	//存储
jedis.set("username","zhangsan");
	//获取
String username = jedis.get("username");
System.out.println(username);
		
//可以使用setex()方法存储可以指定过期时间的 key value
jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
		
//3. 关闭连接
jedis.close();
  1. 哈希类型 hash:map格式 hset/hget/hgetAll
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
	// 存储hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
jedis.hset("user","gender","female");
		
	// 获取hash
String name = jedis.hget("user", "name");
System.out.println(name);
	// 获取hash的所有map中的数据
Map<String, String> user = jedis.hgetAll("user");
	// keyset
Set<String> keySet = user.keySet();
for (String key : keySet) {
		  //获取value
		 String value = user.get(key);
		 System.out.println(key + ":" + value);
}
//3. 关闭连接
jedis.close();
  1. 列表类型 list : linkedlist格式,支持重复元素
    lpush / rpush
    lpop / rpop
    lrange start end : 范围获取
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
	// list 存储
jedis.lpush("mylist","a","b","c");//从左边存
jedis.rpush("mylist","a","b","c");//从右边存
	 // list 范围获取
List<String> mylist = jedis.lrange("mylist", 0, -1);
System.out.println(mylist);
	// list 弹出
String element1 = jedis.lpop("mylist");//c
System.out.println(element1);
String element2 = jedis.rpop("mylist");//c
System.out.println(element2);
	// list 范围获取
List<String> mylist2 = jedis.lrange("mylist", 0, -1);
System.out.println(mylist2);
//3. 关闭连接
jedis.close();
  1. 集合类型 set : 不允许重复元素
    sadd
    smembers:获取所有元素
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
	// set 存储
jedis.sadd("myset","java","php","c++");
	// set 获取
Set<String> myset = jedis.smembers("myset");
System.out.println(myset);
//3. 关闭连接
jedis.close();
  1. 有序集合类型 sortedset:不允许重复元素,且元素有顺序
    zadd
    zrange
//1. 获取连接
Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
//2. 操作
	// sortedset 存储
jedis.zadd("mysortedset",3,"亚瑟");
jedis.zadd("mysortedset",30,"后裔");
jedis.zadd("mysortedset",55,"孙悟空");
		
	// sortedset 获取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
System.out.println(mysortedset);
//3. 关闭连接
jedis.close();

三、实例演示

完成一个手机验证码登录功能:

  • 输入手机号,点击发送后随机生成6位数字码,2分钟有效
  • 输入验证码,点击验证,返回成功或失败
  • 每个手机号每天只能输入3次
import java.util.Objects;
import java.util.Random;
import redis.clients.jedis.Jedis;

public class PhoneCode {
    public static void main(String[] args) {
        // verifyCode("123456789123");
        getRedisCode("123456789123","583692");
    }
    //3-验证码校验
    public static void getRedisCode(String phone, String code) {
        Jedis jedis = new Jedis("192.168.176.128", 6379);
        //验证码key
        String codeKey = "OneDayVerifyCode" + phone + ":code";
        String redisCode = jedis.get(codeKey);
        //判断
        if (code.equals(redisCode)) {
            System.out.println("成功!!!");
        } else {
            System.out.println("失败!!!");
        }
        jedis.close();
    }

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

        //拼接key
        //手机发送次数key
        String countKey = "OneDayVerifyCode" + phone + ":count";
        //验证码key
        String codetKey = "OneDayVerifyCode" + phone + ":code";
        String count = jedis.get(countKey);
        if (Objects.isNull(count)) {
            //没有发送次数,第一次发送
            //设置发送次数是1
            //发送次数过期时间为1天
            jedis.setex(countKey, 24 * 60 * 60, "1");
        } else if (Integer.parseInt(count) <= 2) {
            jedis.incr(countKey);
        } else {
            System.out.println("今天已经发送3次了,不能再发送了!!!");
            jedis.close();
            return;
        }
        //发送验证码放到redis里面
        String vcode = getCode();
        jedis.setex(codetKey, 2 * 60, vcode);
        jedis.close();

    }

    //1-生成6位数字验证码
    public static String getCode() {
        Random random = new Random();
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            code.append(random.nextInt(10));
        }
        return code.toString();
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值