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

2019-06-03 09:51:12 浏览数 (1)

redis 客户端 -- Jedis

1. Jedis 直连

本质是 TCP 连接。

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

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

代码语言:javascript复制
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

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

代码语言:javascript复制
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 的方式
代码语言:javascript复制
/**
 *  @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 连接池的方式
代码语言:javascript复制
JedisPoolConfig config = new JedisPoolConfig();
JedisPool jedisPool = new JedisPool(config , "127.0.0.1" , 6379);
Jedis jedis = jedisPool.getResource();
jedis.close();
demo
代码语言:javascript复制
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对象预先生成,降低使用开销连接池的形式保护和控制资源的使用

相对于直连,使用相对麻烦尤其在资源的管理上需要许多参数保证一旦参数不合理会出现很多问题

0 人点赞