【愚公系列】2023年04月 Java教学课程 124-Redis的客户端Jedis


一、Jedis

Jedis是一个Java语言编写的Redis客户端,它允许Java应用程序通过Redis数据库执行各种操作。Jedis提供了简单、直观的API,可以使用Java代码轻松地与Redis数据存储进行交互。Jedis支持多个数据类型和命令,包括字符串、哈希表、列表、集合、有序集合等。Jedis还提供了一些高级功能,例如连接池、数据分片和事务处理等。

Jedis源码网址:https://github.com/redis/jedis

在这里插入图片描述

1.Jedis简介

1.1 编程语言与redis

在这里插入图片描述

Jedis就是提供了Java与redis的连接服务的,里边有各种各样的API接口,你可以去调用它。

1.2 准备工作

1、jar包导入

下载地址:https://mvnrepository.com/artifact/redis.clients/jedis

基于maven

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

在这里插入图片描述

2、客户端连接redis

连接redis

Jedis jedis = new Jedis("localhost", 6379);

操作redis

jedis.set("name", "itheima");  jedis.get("name");

关闭redis连接

jedis.close();

API文档:https://www.javadoc.io/doc/redis.clients/jedis/latest/redis/clients/jedis/Jedis.html

在这里插入图片描述

1.3 代码实现

创建:com.itheima.JedisTest

public class JedisTest {
    
    

    public static void main(String[] args) {
    
    
        //1.获取连接对象
        Jedis jedis = new Jedis("localhost", 6379);
        //2.执行操作
        jedis.set("age","39");
        String hello = jedis.get("hello");
        System.out.println(hello);
        jedis.lpush("list1","a","b","c","d");
        List<String> list1 = jedis.lrange("list1", 0, -1);
        for (String s:list1 ) {
    
    
            System.out.println(s);
        }
        jedis.sadd("set1","abc","abc","def","poi","cba");
        Long len = jedis.scard("set1");
        System.out.println(len);
        //3.关闭连接
        jedis.close();
    }
}

在这里插入图片描述

2.Jedis工具类

前面我们做的程序还是有点儿小问题,就是我们的Jedis对象的管理是我们自己创建的,真实企业开发中是不可能让你去new一个的,那接下来咱们就要做一个工具类,简单来说,就是做一个创建Jedis的这样的一个工具。

2.1 jedisPool.properties

#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时
redis.pool.testWhileIdle=true
# 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=localhost
#redis服务器的Port
redis.port=6379
#连接Redis超时时间秒
redis.timeout=2000
#连接Redis的password,不写则没有密码
redis.password=
jedisPool.properties

2.2 JedisPoolUtils

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.time.Duration;
import java.util.Properties;

/**
 * @Author AnHui_XiaoYang
 * @Email [email protected]
 * @Date 2021/10/17 20:44
 * @Description Jedis连接池工具
 */
public class JedisPoolUtils {
    
    
    private static JedisPool jedisPool;

    static {
    
    
        //类加载时,读取配置文件
        InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedisPool.properties");
        //创建Properties对象并关联对象
        Properties pro = new Properties();
        try {
    
    
            pro.load(in);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        //创建连接池配置并设置值
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("redis.pool.maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("redis.pool.maxIdle")));
        config.setMinIdle(Integer.parseInt(pro.getProperty("redis.pool.minIdle")));
        config.setMaxWaitMillis(Long.parseLong(pro.getProperty("redis.pool.maxWaitMillis")));
        config.setTestOnBorrow(Boolean.parseBoolean(pro.getProperty("redis.pool.testOnBorrow")));
        config.setTestOnReturn(Boolean.parseBoolean(pro.getProperty("redis.pool.testOnReturn")));
        Duration duration = Duration.ofMinutes(Long.parseLong(pro.getProperty("redis.pool.timeBetweenEvictionRunsMillis")));
        config.setTimeBetweenEvictionRuns(duration);
        config.setTestWhileIdle(Boolean.parseBoolean(pro.getProperty("redis.pool.testWhileIdle")));
        config.setNumTestsPerEvictionRun(Integer.parseInt(pro.getProperty("redis.pool.numTestsPerEvictionRun")));
        String host = pro.getProperty("redis.ip");
        Integer port = Integer.valueOf(pro.getProperty("redis.port"));
        Integer timeout = Integer.valueOf(pro.getProperty("redis.timeout"));
        String password = pro.getProperty("redis.password");
        if (password == null || "".equals(password))
            jedisPool = new JedisPool(config, host, port, timeout);
        else
            jedisPool = new JedisPool(config, host, port, timeout, password);
    }

    /**
     * @return 返回一个JedisClient
     */
    public static Jedis getJedisClient() {
    
    
        return jedisPool.getResource();
    }
}

2.3 使用

public static void main(String[] args) {
    
    
    //平时使用连接池对象即可,每次都重新创建获取会消耗大量时间
    Jedis jedis = JedisPoolUtils.getJedisClient();
    jedis.set("name","zhangsan");
    String s = jedis.get("name");
    System.out.println(s);
    jedis.close();//不用时直接close即可
}

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/129879165
今日推荐