redis 客户端 -- Jedis
1. Jedis 直连
本质是 TCP 连接。
执行流程
- 创建Jedis对象
- 通过Jedis执行命令
- 返回Jedis执行结果
- 关闭Jedis连接
demo
要使用 Jedis,首先我们需要安装 maven 依赖。
redis.clients jedis 2.9.0
创建一个简单的 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)
更多操作可以参考
2. Jedis 连接池
执行流程
- 创建一个JedisPool对象
- 从资源池中获取一个Jedis对象
- 通过Jedis执行命令
- 返回Jedis执行结果
- 关闭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对象预先生成,降低使用开销连接池的形式保护和控制资源的使用 | 相对于直连,使用相对麻烦尤其在资源的管理上需要许多参数保证一旦参数不合理会出现很多问题 |