redis 学习(8)-- redis 客户端 -- Jedis

redis 客户端 -- Jedis

1. Jedis 直连

本质是 TCP 连接。

执行流程

  1. 创建Jedis对象
  2. 通过Jedis执行命令
  3. 返回Jedis执行结果
  4. 关闭Jedis连接

demo

要使用 Jedis,首先我们需要安装 maven 依赖。

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

创建一个简单的 Jedis 直连的小例子:

import redis.clients.jedis.Jedis;

public class TestJedis {
    public static void main(String[] args) {
        // 1.生成一个 Jedis 对象,这个对象负责和指定 Redis 节点进行通信
        Jedis jedis = new Jedis("localhost", 6381);
        // 2. jedis 执行 set 操作
        jedis.set("hello", "world");
        // 3. jedis 执行 get 操作,value=“world”
        String value = jedis.get("hello");
        System.out.println(value);

    }
}

输出结果如下:

创建 Jedis 的方式

/**
 *	@param host Redis节点所在机器的IP或域名
 *  @param port Redis服务的端口号
 *  @param connectionTimeout 客户端连接超时时间(毫秒)
 *  @param soTimeout 客户端读写超时时间(毫秒)
 */
public Jedis(String host , int port , int connectionTimeout , int soTimeout)

更多操作可以参考菜鸟教程 Jedis 教程


2. Jedis 连接池

执行流程

  1. 创建一个JedisPool对象
  2. 从资源池中获取一个Jedis对象
  3. 通过Jedis执行命令
  4. 返回Jedis执行结果
  5. 关闭Jedis连接,将Jedis还给资源池

创建 Jedis 连接池的方式

JedisPoolConfig config = new JedisPoolConfig();
JedisPool jedisPool = new JedisPool(config , "127.0.0.1" , 6379);
Jedis jedis = jedisPool.getResource();
jedis.close();

demo

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class TestJedis {
    public static void main(String[] args) {
        //初始化 Jedis 连接池,通常来说 jedisPool 是单例的。
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6381);
        Jedis jedis = null;
        try {
            // 1. 从连接池获取 Jedis 对象
            jedis = jedisPool.getResource();
            // 2. 执行操作
            jedis.set("hello", "world");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                // 如果使用 JedisPool,close 操作不是关闭连接,代表归还连接池
                jedis.close();
            }
        }


    }
}


3. Jedis 直连 VS Jedis 连接池

优点 缺点
Jedis直连 使用简单
适用于少量长期连接的场景
存在每次新建/关闭TCP连接的开销
资源无法控制,存在连接泄露的风险
Jedis对象线程不安全
Jedis连接池 Jedis对象预先生成,降低使用开销
连接池的形式保护和控制资源的使用
相对于直连,使用相对麻烦
尤其在资源的管理上需要许多参数保证
一旦参数不合理会出现很多问题
posted @ 2019-05-29 17:28  希希里之海  阅读(379)  评论(0编辑  收藏  举报