Redis 的Java客户端——Jedis连接池的使用详解

时间:2021-02-20 00:46:56

一.Redis 的Java客户端

jedis的官方仓库地址:

https://github.com/redis/jedis

Redis 数据结构

Redis 是一个 key-value 的数据库,key 一般是 String 类型,不过 value 的类型多种多样。

Redis 的Java客户端——Jedis连接池的使用详解

1.1 引入Redis依赖

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

建立一个单元测试: Redis 的Java客户端——Jedis连接池的使用详解

建立jedis链接,因为我的redis没有设置密码,所以注释掉了。

    @BeforeEach
    void setUp(){
        jedis=new Jedis("127.0.0.1",6379);
//        jedis.auth("123321");
        jedis.select(0);
    }

junit测试:

    @Test
    void testString(){
//        存入数据
        String result =jedis.set("name","小猪");
        System.out.println("result"+result);
//        获取数据
        String name = jedis.get("name");
        System.out.println("name = "+name);
    }

JUnit5 @AfterEach 注解替换了 JUnit4 中的@After注解。它用于表示应在当前类中的每个@Test方法之后执行注解方法。

@AfterEach
void tearDown(){
    if (jedis!=null){
        jedis.close();
    }
}

执行结果:

Redis 的Java客户端——Jedis连接池的使用详解

到RESP里检查:

Redis 的Java客户端——Jedis连接池的使用详解

RESP配置:RESP配置非常的简单:

如下:

Redis 的Java客户端——Jedis连接池的使用详解

1.2 Hash例子

插入一个Hash例子:

    void testHash(){
//        插入hash数据
        jedis.hset("user:1","name","jack");
        jedis.hset("user:1","age", "21");
//        获取
        Map<String,String> map= jedis.hgetAll("user:1");
        System.out.println(map);
    }

运行结果:

Redis 的Java客户端——Jedis连接池的使用详解

到RESP里查看:

Redis 的Java客户端——Jedis连接池的使用详解

1.3 Redis使用步骤总结

Jedis基本使用步骤:

1.引入依赖

2.创建 Jedis 对象, 建立连接

3.使用 Jedis, 方法名与 Red is 命令一致

4.释放资源

二.Jedis连接池

Jedis 本身是线程不安全的, 并且频繁的创建和销毁连接会有性能损耗, 因此我们推荐大家使用 Jedis 连接池代替 Jedis 的直连方式。

新建立一个Jedis连接池,如下:

Redis 的Java客户端——Jedis连接池的使用详解

public class JedisConnectionFacory {
    private static final JedisPool jedisPool;

    static {
//        配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8); //最大连接数
        poolConfig.setMaxIdle(8);//预备连接数
        poolConfig.setMinIdle(0);//最小连接数
        poolConfig.setMaxWaitMillis(1000);//等待时间
//        创建连接池对象
        jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000);
    }
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

最大连接数:

poolConfig.setMaxTotal(8);

预备连接数:

poolConfig.setMaxIdle(8);

最小连接数:

poolConfig.setMinIdle(0);

将上面的单元测试,连接的池改为前面的Jedis连接池。

//        jedis=new Jedis("127.0.0.1",6379);
        jedis= JedisConnectionFacory.getJedis();
//        jedis.auth("123321");
        jedis.select(0);

测试:没有问题。

Redis 的Java客户端——Jedis连接池的使用详解

1.2 SpringDataRedis

SpringData 是 Spring 中数据操作的模块,包含对各种数据库的集成,其中对 Redis 的集成模块就叫做 SpringDataRedis

  • 提供了对不同 Redis 客户端的整合(Lettuce 和 edis)
  • 提供了 RedisTemplate 统一 API 来操作 Redis
  • 支持 Redis 的发布订阅模型
  • 支持 Redis 哨兵和 Redis 集群
  • 支持基于 Lettuce 的响应式编程
  • 支持基于 JDK、JSON、字符串、Spring 对象的数据序列化及反序列化
  • 支持基于 Redis 的 DKCollection 实现

Spring Data Red is 中提供了 Red is Template 工具类, 其中封装了各种对 Red is 的操作。并且将不同数据类型的操作 API 封装到了不同的类型中:

Redis 的Java客户端——Jedis连接池的使用详解

1.2.1 创建一个新的项目

创建一个Spring项目。如下图:

Redis 的Java客户端——Jedis连接池的使用详解

选择一个NoSQL:Redis,如下图。

Redis 的Java客户端——Jedis连接池的使用详解

如下:

Redis 的Java客户端——Jedis连接池的使用详解

SpringBoot 已经提供了对 SpringDataRedis 的支持,使用非常简单:

1.引入依赖redis:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.引入common-pool依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>