Jedis 简介
Jedis 是一个 Java 客户端库,用于与 Redis(Remote Dictionary Server)交互,由 Redis 官方推荐 的 Java 开发工具之一。它提供了简单、高效的 API,支持 连接池、事务、管道(Pipeline)、集群模式 等 Redis 核心功能,适用于 高并发、低延迟 的应用场景。Jedis 以其 轻量级、易用性和高性能 成为 Java 开发者操作 Redis 的首选工具之一。
核心特性
- 完整的 Redis 协议支持
- 覆盖 Redis 所有命令(如
SET/GET
、HSET/HGET
、LPUSH/LPOP
) - 支持 Redis 6.0+ 的新特性(如 ACL、客户端缓存)
- 覆盖 Redis 所有命令(如
- 连接池管理
- 内置 JedisPool,复用连接减少开销
- 可配置 最大连接数、超时时间、空闲检测
- 高性能操作
- Pipeline(管道):批量执行命令,减少网络往返
- 事务(Transaction):
MULTI/EXEC
保证命令原子性
- 集群与哨兵模式
- 支持 Redis Cluster(自动路由请求到正确节点)
- 支持 Redis Sentinel(自动故障转移)
- Lua 脚本支持
- 通过
Jedis.eval()
执行 Lua 脚本,实现复杂逻辑
- 通过
- SSL 与认证
- 支持 TLS 加密连接
- 支持 Redis 密码认证(AUTH)
核心概念
术语 | 说明 |
---|---|
Jedis 实例 | 单个 Redis 连接(线程不安全,需配合连接池使用) |
JedisPool | 连接池,管理多个 Jedis 实例(推荐生产环境使用) |
Pipeline | 批量命令打包发送,提升吞吐量 |
Transaction | 事务块,保证一组命令的原子性 |
Cluster | 集群模式客户端,自动处理分片和重定向 |
典型应用场景
- 缓存加速
- 存储热点数据(如用户信息、商品详情)
- 分布式锁
- 通过
SETNX
实现互斥锁(如秒杀系统)
- 通过
- 消息队列
- 使用
List
或Stream
实现异步任务队列
- 使用
- 计数器与排行榜
- 利用
INCR
和ZSET
实现实时统计
- 利用
- 会话共享
- 分布式系统中存储用户 Session
快速入门示例
1. 添加 Maven 依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.4.1</version>
</dependency>
2. 基础操作
import redis.clients.jedis.Jedis;
public class JedisDemo {
public static void main(String[] args) {
// 创建连接(默认端口 6379)
try (Jedis jedis = new Jedis("localhost")) {
// 存储数据
jedis.set("foo", "bar");
System.out.println(jedis.get("foo")); // 输出 "bar"
// 哈希表操作
jedis.hset("user:1001", "name", "Alice");
System.out.println(jedis.hget("user:1001", "name")); // 输出 "Alice"
}
}
}
3. 使用连接池
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolDemo {
public static void main(String[] args) {
// 配置连接池
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100); // 最大连接数
try (JedisPool pool = new JedisPool(config, "localhost", 6379)) {
try (Jedis jedis = pool.getResource()) {
jedis.set("pool_test", "success");
System.out.println(jedis.get("pool_test")); // 输出 "success"
}
}
}
}
4. Pipeline 批量操作
try (Jedis jedis = new Jedis("localhost")) {
Pipeline pipeline = jedis.pipelined();
for (int i = 0; i < 1000; i++) {
pipeline.set("key_" + i, "value_" + i);
}
pipeline.sync(); // 批量执行
}
性能优化建议
- 合理使用连接池
- 设置
maxTotal
和maxIdle
避免资源耗尽 - 监控
getNumActive()
防止连接泄漏
- 设置
- Pipeline 优化批量操作
- 单次 Pipeline 命令数建议控制在 1万以内
- 避免大 Key
- Value 超过 1MB 会影响性能(如拆分或压缩)
- 集群模式调优
- 使用
JedisCluster
时,合理设置maxAttempts
(默认 5)
- 使用
- Lua 脚本替代多命令
- 减少网络往返(如原子性扣库存)
数据统计
数据评估
关于Jedis特别声明
本站速览导航提供的Jedis都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由速览导航实际控制,在2025年4月1日 下午9:43收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,速览导航不承担任何责任。