目录
- 一、引入jedis依赖
- 二、映射端口
- 三、连接Redis服务器
- 四、通用命令使用
-
- [4.1 get / set](#4.1 get / set)
- [4.2 exists / del](#4.2 exists / del)
- [4.3 keys](#4.3 keys)
- [4.4 expire / ttl](#4.4 expire / ttl)
- [4.5 type](#4.5 type)
- 五、字符串String
-
- [5.1 mset 和 mget](#5.1 mset 和 mget)
- [5.2 getrange 和 setrange](#5.2 getrange 和 setrange)
- [5.3 append](#5.3 append)
- [5.4 incr 和 decr](#5.4 incr 和 decr)
- 六、列表List
-
- [6.1 lpush 和 lpop](#6.1 lpush 和 lpop)
- [6.2 rpush 和 rpop](#6.2 rpush 和 rpop)
- [6.3 lrange](#6.3 lrange)
- [6.4 blpop 和 brpop](#6.4 blpop 和 brpop)
- [6.5 lindex 和 linsert](#6.5 lindex 和 linsert)
- [6.6 llen](#6.6 llen)
- 七、哈希表Hash
-
- [7.1 hset 和 hget](#7.1 hset 和 hget)
- [7.2 hexists 和 hdel](#7.2 hexists 和 hdel)
- [7.3 hkeys 和 hvals](#7.3 hkeys 和 hvals)
- [7.4 hmget](#7.4 hmget)
- [7.5 hlen](#7.5 hlen)
- [7.6 hincrby 和 hincrbyfloat](#7.6 hincrby 和 hincrbyfloat)
- 八、集合Set
-
- [8.1 sadd 和 smembers](#8.1 sadd 和 smembers)
- [8.2 srem 和 sismember](#8.2 srem 和 sismember)
- [8.3 scard](#8.3 scard)
- [8.4 sinter](#8.4 sinter)
- [8.5 sunion](#8.5 sunion)
- [8.6 sdiff](#8.6 sdiff)
- 九、有序集合ZSet
-
- [9.1 zadd 和 zrange](#9.1 zadd 和 zrange)
- [9.2 zrem 和 zcard](#9.2 zrem 和 zcard)
- [9.3 zcount](#9.3 zcount)
- [9.4 zpopmax 和 zpopmin](#9.4 zpopmax 和 zpopmin)
- [9.5 zrank](#9.5 zrank)
- [9.6 zscore](#9.6 zscore)
- [9.7 zincrby](#9.7 zincrby)
- [9.8 zinterstore](#9.8 zinterstore)
- [9.9 zunionstore](#9.9 zunionstore)

一、引入jedis依赖
Java 操作 redis 的客⼾端有很多、在这使用的是 jedis。
创建 maven 项⽬,把 jedis 的依赖拷⻉到 pom.xml 中。
xml
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.2.0</version>
</dependency>
二、映射端口
因为Redis我们是安装在服务器上的,而我们的Java代码又是在本地的。要想让本地主机访问服务器Redis,有以下三种方法:
- 服务器防火墙开放Redis端口6379,可能会被攻击;
- 将本地程序打jar包,放到服务器上运行;
- 使用ssh端口转发的方式,将服务器的Redis端口映射到本地。
我们此处使用的是方法3
在 xshell 中,进⾏如下配置(我们在前面配置Redis服务器的时候,将绑定IP 相关的 bing属性配置为0.0.0.0,并且关闭了保护模式protected-mode配置为no):
- 右键云服务器的会话,选择属性
- 找到隧道 -> 配置转移规则
- 使⽤该会话连接服务器
- 本地验证 使用netstat命令
三、连接Redis服务器
- 使⽤ JedisPool 描述 Redis 服务器的位置 ,使⽤ url 来表⽰
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1.6379"); - 使⽤ getResource 和 服务器建⽴连接
Jedis jedis = jedisPool.getResource() - 连接使⽤完毕需要 close 关闭,也可以直接使⽤ try ⾃动关闭
- 通过 ping ⽅法可以检测连接是否正确建⽴
String ping = jedis.ping();
java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisDemo {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6379");
try (Jedis jedis = jedisPool.getResource()) {
String ping = jedis.ping();
System.out.println(ping);
}
}
}

四、通用命令使用
4.1 get / set
直接调用Jedis类下的set和get方法即可,要想在set创建添加条件,使用redis.clients.jedis.params包下SetParams类,该类其中方法对应条件;
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
String set(String key, String value) |
String |
最简形式,永远返回 "OK" |
jedis.set("k","v"); |
String set(byte[] key, byte[] value) |
String |
二进制版 | jedis.set("foo".getBytes(), "bar".getBytes()); |
String set(String k, String v, SetParams params) |
String |
带高级参数(NX/XX/EX/PX/KEEPTTL/GET) | jedis.set("lock", "uuid", SetParams.setParams().nx().ex(30)); |
String set(byte[] k, byte[] v, SetParams params) |
String |
二进制版 + 参数 | jedis.set("lock".getBytes(), "uuid".getBytes(), SetParams.setParams().nx().ex(30)); |
String set(String k, String v, String nxxx, String expx, long time) |
String |
旧版风格 (已标记 @Deprecated) |
jedis.set("old", "val", "NX", "EX", 60); |
String set(String k, String v, String nxxx, String expx, int time) |
String |
旧版风格 2 | jedis.set("old", "val", "XX", "PX", 60000); |
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
String get(String key) |
String |
单键取值,key 不存在返回 null |
String v = jedis.get("k"); |
byte[] get(byte[] key) |
byte[] |
二进制键取值 | byte[] v = jedis.get("k".getBytes()); |
| 方法 | 参数类型 | 对应 Redis 参数 | 说明 | 示例 |
|---|---|---|---|---|
nx() |
无 | NX |
Not exists -- 只有 key 不存在 时才设置;用于 "分布式锁" 场景。 | SET lock uuid NX |
xx() |
无 | XX |
eXists -- 只有 key 已存在 时才覆盖;可做 "更新保护"。 | SET counter 100 XX |
ex(int seconds) |
int | EX seconds |
设置 秒级 过期时间。 | ex(60) → 60 s |
px(long millis) |
long | PX milliseconds |
设置 毫秒级 过期时间。 | px(60000) → 60 000 ms |
exAt(long unixTime) |
long | EXAT unix-timestamp-seconds |
设置在 某个 Unix 秒级时间戳 过期(Redis 6.2+)。 | exAt(1735689600) |
pxAt(long unixTimeMs) |
long | PXAT unix-timestamp-ms |
设置在 某个 Unix 毫秒时间戳 过期(Redis 6.2+)。 | pxAt(1735689600000L) |
keepttl() |
无 | KEEPTTL |
保留 key 上一次的 TTL;覆盖值但不重置过期时间(Redis 6.0+)。 | SET newVal KEEPTTL |
实例方法:
java
public static void testGetSet(Jedis jedis) {
System.out.println("------------GetSet--------");
jedis.set("key1","111");
SetParams params = new SetParams();
params.ex(10);
params.xx();
jedis.set("key2","222",params);
System.out.println(jedis.get("key1"));
System.out.println(jedis.get("key2"));
}
结果:

4.2 exists / del
直接调用Jedis类下的exists 和del 方法即可。
| 方法签名 | 返回值 | 说明 | 例子 |
|---|---|---|---|
boolean exists(String key) |
boolean |
单键是否存在 | jedis.exists("k1") → true |
long exists(String... keys) |
long |
批量,返回 存在的个数 | jedis.exists("k1","k2","k3") → 2L |
long exists(byte[] key) |
long |
二进制键单键 | 同上,只是 byte[] |
long exists(byte[]... keys) |
long |
二进制键批量 | 同上 |
| 方法签名 | 返回值 | 说明 | 例子 |
|---|---|---|---|
long del(String key) |
long |
删单键,返回 被删数量(0 或 1) | jedis.del("k1") → 1L |
long del(String... keys) |
long |
批量删,返回 实际删除个数 | jedis.del("k1","k2","k3") → 3L |
long del(byte[] key) |
long |
二进制键单键 | 同上 |
long del(byte[]... keys) |
long |
二进制键批量 | 同上 |
实例方法:
java
private static void testExistsAndDel(Jedis jedis) {
System.out.println("------------ExistsAndDel--------");
jedis.set("key1","111");
jedis.set("key2","222");
System.out.println("key1 存在与否:" + jedis.exists("key1"));
System.out.println("key2 存在与否:" + jedis.exists("key2"));
System.out.println("key1 与 key2 存在与否:" + jedis.exists("key1","key2"));
System.out.println(jedis.del("key1"));
System.out.println("key1 存在与否:" + jedis.exists("key1"));
}
结果:

4.3 keys
直接调用Jedis类下的keys方法即可。
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
Set<String> keys(String pattern) |
Set<String> |
字符串模式 | Set<String> list = jedis.keys("user:*"); |
Set<byte[]> keys(byte[] pattern) |
Set<byte[]> |
二进制模式 | Set<byte[]> raw = jedis.keys("user:*".getBytes()); |

示例代码:
java
private static void testKeys(Jedis jedis) {
System.out.println("------------keys--------");
jedis.set("key1","111");
jedis.set("key2","222");
jedis.set("key3","333");
jedis.set("key4","444");
Set<String> keys = jedis.keys("*");
System.out.println("* : " + keys);
Set<String> keys1 = jedis.keys("???4");
System.out.println("? : " + keys1);
Set<String> keys2 = jedis.keys("key[14]");
System.out.println("[] : " + keys2);
Set<String> keys3 = jedis.keys("key[^1]");
System.out.println("^ : " + keys3);
Set<String> keys4 = jedis.keys("key[1-2]");
System.out.println("[-] : " + keys4);
}
结果:

4.4 expire / ttl
直接调用Jedis类下的expire 和 ttl 方法即可。
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
long expire(String key, long seconds) |
long |
秒级 TTL | jedis.expire("k", 60) → 1 成功 0 失败 |
long expire(byte[] key, long seconds) |
long |
二进制键 | 同上 |
long pexpire(String key, long millis) |
long |
毫秒级 TTL | jedis.pexpire("k", 60_000) |
long pexpire(byte[] key, long millis) |
long |
二进制 | 同上 |
long expireAt(String key, long unixTime) |
long |
Unix 秒级时间戳 | jedis.expireAt("k", 1735689600) |
long expireAt(byte[] key, long unixTime) |
long |
二进制 | 同上 |
long pexpireAt(String key, long unixMs) |
long |
Unix 毫秒时间戳 | jedis.pexpireAt("k", 1735689600000L) |
long pexpireAt(byte[] key, long unixMs) |
long |
二进制 | 同上 |
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
long ttl(String key) |
long |
剩余 秒;-1 永久键,-2 不存在 | jedis.ttl("k") → 59 |
long ttl(byte[] key) |
long |
二进制 | 同上 |
long pttl(String key) |
long |
剩余 毫秒 | jedis.pttl("k") → 59000 |
long pttl(byte[] key) |
long |
二进制 | 同上 |
示例代码:
java
private static void testExpireAndTTL(Jedis jedis) {
System.out.println("------------ExpireAndTTL--------");
jedis.set("key1","111");
jedis.expire("key1",10);
System.out.println("key1 的 过期时间 " + jedis.ttl("key1"));
}
结果:

4.5 type
直接调用Jedis类下的type 方法即可。
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
String type(String key) |
String |
返回 key 的类型字符串 | String t = jedis.type("k"); |
String type(byte[] key) |
String |
二进制键 | String t = jedis.type("k".getBytes()); |
示例代码
java
private static void testType(Jedis jedis) {
System.out.println("------------type--------");
jedis.set("key1", "value");
System.out.println(jedis.type("key1"));
jedis.lpush("key2", "a", "b", "c");
System.out.println(jedis.type("key2"));
jedis.hset("key3", "name", "zhangsan");
System.out.println(jedis.type("key3"));
jedis.sadd("key4", "111", "222", "333");
System.out.println(jedis.type("key4"));
jedis.zadd("key5", 1, "aaa");
System.out.println(jedis.type("key5"));
}
结果:

五、字符串String
5.1 mset 和 mget
直接调用 mset 和 mget方法,达到批量增加、获取效果。
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
mset(String... keysValues) |
String |
字符串键值对批量设置(成对出现) | jedis.mset("k1","v1","k2","v2"); |
mset(byte[]... keysValues) |
String |
二进制键值对批量设置 | jedis.mset(b"k1",b"v1",b"k2",b"v2"); |
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
mget(String... keys) |
List<String> |
字符串键批量取值 | List<String> vs = jedis.mget("k1","k2"); |
mget(byte[]... keys) |
List<byte[]> |
二进制键批量取值 | List<byte[]> vs = jedis.mget(b"k1",b"k2"); |
示例代码:
java
private static void testMSetAndMGet(Jedis jedis) {
System.out.println("------------MSetAndMGet--------");
jedis.mset("key1", "111", "key2","222","key3","333");
List<String> values = jedis.mget("key1", "key2", "key555", "key3");
System.out.println(values.toString());
}
结果:

5.2 getrange 和 setrange
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
getrange(String key, long start, long end) |
String |
返回 key 对应字符串值在 [start, end] 区间的子串(闭区间,含 end)。 下标从 0 开始,支持负下标(-1 表示最后一个字符)。 | String sub = jedis.getrange("k", 0, 3); |
getrange(byte[] key, long start, long end) |
byte[] |
二进制版本,同上。 | byte[] sub = jedis.getrange(b"k", 0, 3); |

| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
setrange(String key, long offset, String value) |
Long |
从 offset 位置开始覆盖原值,写入 value。 若 offset 超过原长度,中间用 \0 填充。返回 最终字符串长度。 |
long len = jedis.setrange("k", 2, "Redis"); |
setrange(byte[] key, long offset, byte[] value) |
Long |
二进制版本,同上。 | long len = jedis.setrange(b"k", 2, b"Redis"); |

示例代码:
java
private static void testGetRangeAndSetRange(Jedis jedis) {
System.out.println("------------GetRangeAndSetRange--------");
jedis.set("key","asdfghjkl");
String key = jedis.getrange("key", 2, 5);
System.out.println(key);
jedis.setrange("key",2,"abcd");
String key1 = jedis.getrange("key", 2, 5);
System.out.println(key1);
}
结果:

5.3 append
| 方法签名 | 返回值 | 说明 | 示例 |
|---|---|---|---|
append(String key, String value) |
Long |
将 value 追加到 key 对应字符串的末尾 。 若 key 不存在,则等价于 set(key, value)。 返回追加后整个字符串的长度。 |
long len = jedis.append("k", "world"); |
append(byte[] key, byte[] value) |
Long |
二进制版本,同上。 | long len = jedis.append(b"k", b"world"); |
示例代码:
java
private static void testAppend(Jedis jedis) {
System.out.println("------------append--------");
jedis.set("key","abc");
System.out.println(jedis.get("key"));
jedis.append("key","def");
System.out.println(jedis.get("key"));
}
结果:

5.4 incr 和 decr
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
incr(String key) |
Long |
整数值 +1 | long v = jedis.incr("cnt"); |
incr(byte[] key) |
Long |
二进制 key 整数值 +1 | long v = jedis.incr(b"cnt"); |
incrBy(String key, long increment) |
Long |
整数值 +increment | jedis.incrBy("cnt", 5); |
incrBy(byte[] key, long increment) |
Long |
二进制 key 整数值 +increment | jedis.incrBy(b"cnt", 5); |
incrByFloat(String key, double increment) |
Double |
浮点数值 +increment | jedis.incrByFloat("price", 1.25); |
incrByFloat(byte[] key, double increment) |
Double |
二进制 key 浮点数值 +increment | jedis.incrByFloat(b"price", 1.25); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
decr(String key) |
Long |
整数值 -1 | long v = jedis.decr("cnt"); |
decr(byte[] key) |
Long |
二进制 key 整数值 -1 | long v = jedis.decr(b"cnt"); |
decrBy(String key, long decrement) |
Long |
整数值 -decrement | jedis.decrBy("cnt", 3); |
decrBy(byte[] key, long decrement) |
Long |
二进制 key 整数值 -decrement | jedis.decrBy(b"cnt", 3); |
示例代码:
java
private static void testIncrAndDecr(Jedis jedis) {
System.out.println("------------IncrAndDecr--------");
jedis.set("key","10");
System.out.println(jedis.get("key"));
jedis.incr("key");
System.out.println(jedis.get("key"));
jedis.decr("key");
System.out.println(jedis.get("key"));
}
结果:

六、列表List
6.1 lpush 和 lpop
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
lpush(String key, String... values) |
Long |
将 1 个或多个 value 依次 插到列表 左端;返回插入后列表长度。 | long len = jedis.lpush("lst", "a", "b"); |
lpush(byte[] key, byte[]... values) |
Long |
二进制版本,同上。 | long len = jedis.lpush(b"lst", b"a", b"b"); |

| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
lpop(String key) |
String |
弹出并返回 最左端 元素;列表空返回 null。 |
String v = jedis.lpop("lst"); |
lpop(byte[] key) |
byte[] |
二进制版本,同上。 | byte[] v = jedis.lpop(b"lst"); |
lpop(String key, int count) |
List<String> |
Redis 6.2+ 支持:一次弹出最多 count 个左端元素;列表空返回空 List。 |
List<String> vs = jedis.lpop("lst", 3); |
lpop(byte[] key, int count) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> vs = jedis.lpop(b"lst", 3); |

示例代码:
java
private static void testlpushAndlpop(Jedis jedis) {
System.out.println("------------LpushAndLpop--------");
jedis.lpush("key","111","222","333");
String key = jedis.lpop("key");
System.out.println(key);
}
结果:

6.2 rpush 和 rpop
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
rpush(String key, String... values) |
Long |
将 1 个或多个 value 依次 插到列表 右端;返回插入后列表长度。 | long len = jedis.rpush("lst", "x", "y"); |
rpush(byte[] key, byte[]... values) |
Long |
二进制版本,同上。 | long len = jedis.rpush(b"lst", b"x", b"y"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
rpop(String key) |
String |
弹出并返回 最右端 元素;列表空返回 null。 |
String v = jedis.rpop("lst"); |
rpop(byte[] key) |
byte[] |
二进制版本,同上。 | byte[] v = jedis.rpop(b"lst"); |
rpop(String key, int count) |
List<String> |
Redis 6.2+ 支持:一次弹出最多 count 个右端元素;列表空返回空 List。 |
List<String> vs = jedis.rpop("lst", 3); |
rpop(byte[] key, int count) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> vs = jedis.rpop(b"lst", 3); |
示例代码:
java
private static void testRpushAndRpop(Jedis jedis) {
System.out.println("------------RpushAndRpop--------");
jedis.rpush("key","111","222","333");
String key = jedis.rpop("key");
System.out.println(key);
}
结果:

6.3 lrange
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
lrange(String key, long start, long stop) |
List<String> |
返回列表 key 在闭区间 [start, stop] 内的所有元素;支持负下标(-1 表示最后一个)。 |
List<String> items = jedis.lrange("lst", 0, -1); |
lrange(byte[] key, long start, long stop) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> items = jedis.lrange(b"lst", 0, -1); |
示例代码:
java
private static void testLrange(Jedis jedis) {
System.out.println("------------Lrange--------");
jedis.rpush("key1","111","222","333");
jedis.lpush("key2","111","222","333");
System.out.println("key1: " + jedis.lrange("key1", 0, -1));
System.out.println("key2: "+jedis.lrange("key2", 0, -1));
}
结果:

6.4 blpop 和 brpop
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
blpop(int timeout, String... keys) |
List<String> |
阻塞左端弹出 :按给定 key 顺序,找到第一个非空列表并弹出其最左元素。 返回含 key 名 与 元素值 的两项 List;超时返回空 List。 | List<String> r = jedis.blpop(5, "q1", "q2"); |
blpop(int timeout, byte[]... keys) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> r = jedis.blpop(5, b"q1", b"q2"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
brpop(int timeout, String... keys) |
List<String> |
阻塞右端弹出:逻辑同上,仅弹出最右元素。 | List<String> r = jedis.brpop(5, "q1", "q2"); |
brpop(int timeout, byte[]... keys) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> r = jedis.brpop(5, b"q1", b"q2"); |
示例代码:
java
private static void testBLpopAndBRpop(Jedis jedis) {
System.out.println("------------BLpopAndBRpop--------");
System.out.println(jedis.blpop(0, "key1"));
System.out.println(jedis.brpop(0, "key2"));
}
结果:

6.5 lindex 和 linsert
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
lindex(String key, long index) |
String |
返回列表 key 在 index 位置的元素;支持负下标(-1 表示最后一个)。 若索引越界返回 null。 |
String v = jedis.lindex("lst", 0); |
lindex(byte[] key, long index) |
byte[] |
二进制版本,同上。 | byte[] v = jedis.lindex(b"lst", -1); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
linsert(String key, ListPosition where, String pivot, String value) |
Long |
把 value 插入到列表 key 中第一个等于 pivot 的元素 前/后 。 where 取 ListPosition.BEFORE 或 AFTER。 返回插入后列表长度;若 pivot 不存在返回 -1;若 key 不存在返回 0。 |
long len = jedis.linsert("lst", ListPosition.AFTER, "A", "B"); |
linsert(byte[] key, ListPosition where, byte[] pivot, byte[] value) |
Long |
二进制版本,同上。 | long len = jedis.linsert(b"lst", ListPosition.BEFORE, b"A", b"B"); |
示例代码:
java
private static void testLindexAndLinsert(Jedis jedis) {
System.out.println("------------LindexAndLinsert--------");
jedis.rpush("key1","111","222","333");
jedis.lpush("key2","111","111","333");
System.out.println(jedis.lindex("key1", 1));
jedis.linsert("key2", ListPosition.AFTER,"111","xxx");
System.out.println(jedis.lrange("key2", 0, -1));
}
结果:

6.6 llen
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
llen(String key) |
Long |
获取列表 key 的元素个数。 |
long len = jedis.llen("lst"); |
llen(byte[] key) |
Long |
二进制版本,同上。 | long len = jedis.llen(b"lst"); |
示例代码:
java
private static void testLlen(Jedis jedis) {
System.out.println("------------llen--------");
jedis.rpush("key1","111","222","333");
System.out.println(jedis.llen("key1"));
}
结果:

七、哈希表Hash
7.1 hset 和 hget
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hset(String key, String field, String value) |
Long |
给 key 的哈希表设置单个 field→value。 返回 1:新增字段;0:覆盖旧值。 |
long r = jedis.hset("user:1", "name", "Tom"); |
hset(byte[] key, byte[] field, byte[] value) |
Long |
二进制版本,同上。 | long r = jedis.hset(b"user:1", b"name", b"Tom"); |
hset(String key, Map<String,String> hash) |
Long |
批量设置:整个 Map 写入哈希表;返回 新增字段个数(Redis 4.0+ 行为)。 | jedis.hset("user:1", Map.of("age","18","city","BJ")); |
hset(byte[] key, Map<byte[],byte[]> hash) |
Long |
二进制批量版本,同上。 | jedis.hset(b"user:1", map); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hget(String key, String field) |
String |
返回 key 哈希表中 field 对应的值;字段不存在返回 null。 |
String n = jedis.hget("user:1", "name"); |
hget(byte[] key, byte[] field) |
byte[] |
二进制版本,同上。 | byte[] n = jedis.hget(b"user:1", b"name"); |
示例代码:
java
private static void testHsetAndHget(Jedis jedis) {
System.out.println("------------HsetAndHget--------");
jedis.hset("key","f1","111");
System.out.println(jedis.hget("key", "f1"));
}
结果:

7.2 hexists 和 hdel
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hexists(String key, String field) |
Boolean |
存在返回 true,否则 false。 |
boolean e = jedis.hexists("user:1", "name"); |
hexists(byte[] key, byte[] field) |
Boolean |
二进制版本,同上。 | boolean e = jedis.hexists(b"user:1", b"name"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hdel(String key, String... fields) |
Long |
删除给定字段,返回 实际删除的字段个数。 | long n = jedis.hdel("user:1", "name", "age"); |
hdel(byte[] key, byte[]... fields) |
Long |
二进制版本,同上。 | long n = jedis.hdel(b"user:1", b"name", b"age"); |
示例代码:
java
private static void testHexistsAndHdel(Jedis jedis) {
System.out.println("------------HexistsAndHdel--------");
Map<String,String> filed = new HashMap<>();
filed.put("f1","111");
filed.put("f2","222");
filed.put("f3","333");
filed.put("f4","444");
jedis.hset("key",filed);
System.out.println(jedis.hexists("key","f1"));
System.out.println(jedis.hexists("key","f100"));
System.out.println(jedis.hdel("key", "f2", "f4"));
System.out.println(jedis.hexists("key","f2"));
}
结果:

7.3 hkeys 和 hvals
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hkeys(String key) |
Set<String> |
返回哈希表 key 中 所有字段名 的 Set;key 不存在返回空 Set。 |
Set<String> fs = jedis.hkeys("user:1"); |
hkeys(byte[] key) |
Set<byte[]> |
二进制版本,同上。 | Set<byte[]> fs = jedis.hkeys(b"user:1"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hvals(String key) |
List<String> |
返回哈希表 key 中 所有值 的 List(顺序与 hkeys 对应);key 不存在返回空 List。 |
List<String> vs = jedis.hvals("user:1"); |
hvals(byte[] key) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> vs = jedis.hvals(b"user:1"); |
示例代码:
java
private static void testHkeysAndHvalues(Jedis jedis) {
System.out.println("------------HkeysAndHvalues--------");
jedis.hset("key","f1","111");
jedis.hset("key","f2","222");
System.out.println(jedis.hkeys("key"));
System.out.println(jedis.hvals("key"));
}
结果:

7.4 hmget
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hmget(String key, String... fields) |
List<String> |
批量获取哈希表 key 中一个或多个字段的值; 返回 List,元素位置与 fields 一一对应,字段不存在则为 null。 |
List<String> vs = jedis.hmget("user:1", "name", "age", "missing"); |
hmget(byte[] key, byte[]... fields) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> vs = jedis.hmget(b"user:1", b"name", b"age"); |
示例代码:
java
private static void testHmget(Jedis jedis) {
System.out.println("------------Hmget--------");
Map<String,String> filed = new HashMap<>();
filed.put("f1","111");
filed.put("f2","222");
filed.put("f3","333");
filed.put("f4","444");
jedis.hset("key",filed);
System.out.println(jedis.hmget("key", "f1", "f3"));
}
结果:

7.5 hlen
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hlen(String key) |
Long |
获取哈希表 key 中字段的个数。 |
long n = jedis.hlen("user:1"); |
hlen(byte[] key) |
Long |
二进制版本,同上。 | long n = jedis.hlen(b"user:1"); |
示例代码:
java
private static void testHlen(Jedis jedis) {
System.out.println("------------Hlen--------");
jedis.hset("key","f1","111");
jedis.hset("key","f2","222");
System.out.println(jedis.hlen("key"));
}
结果:

7.6 hincrby 和 hincrbyfloat
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hincrBy(String key, String field, long increment) |
Long |
对哈希字段 field 做 整数 +increment; 若字段不存在则先置 0 再计算;返回新值。 |
long v = jedis.hincrBy("user:1", "score", 5); |
hincrBy(byte[] key, byte[] field, long increment) |
Long |
二进制版本,同上。 | long v = jedis.hincrBy(b"user:1", b"score", 5); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
hincrBy(String key, String field, long increment) |
Long |
对哈希字段 field 做 整数 +increment; 若字段不存在则先置 0 再计算;返回新值。 |
long v = jedis.hincrBy("user:1", "score", 5); |
hincrBy(byte[] key, byte[] field, long increment) |
Long |
二进制版本,同上。 | long v = jedis.hincrBy(b"user:1", b"score", 5); |
示例代码:
java
private static void testHIncrByAndIncrByFloat(Jedis jedis) {
System.out.println("------------HIncrByAndIncrByFloat--------");
jedis.hset("key","f1","111");
jedis.hset("key","f2","2.2");
System.out.println(jedis.hincrBy("key", "f1", 1L));
System.out.println(jedis.hincrByFloat("key", "f2", 1.2f));
}
结果:

八、集合Set
8.1 sadd 和 smembers
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
sadd(String key, String... members) |
Long |
向集合 key 添加成员,返回 新增成员个数(已存在不计)。 |
long n = jedis.sadd("tags", "java", "redis"); |
sadd(byte[] key, byte[]... members) |
Long |
二进制版本,同上。 | long n = jedis.sadd(b"tags", b"java", b"redis"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
smembers(String key) |
Set<String> |
返回集合 key 中 所有成员 的 Set;key 不存在返回空 Set。 |
Set<String> ms = jedis.smembers("tags"); |
smembers(byte[] key) |
Set<byte[]> |
二进制版本,同上。 | Set<byte[]> ms = jedis.smembers(b"tags"); |
示例代码:
java
private static void testSaddAndSmembers(Jedis jedis) {
System.out.println("------------SaddAndSmembers--------");
System.out.println(jedis.sadd("key", "111", "222", "3333"));
System.out.println(jedis.smembers("key"));
}
结果:

8.2 srem 和 sismember
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
srem(String key, String... members) |
Long |
从集合 key 移除给定成员,返回 实际移除的个数(不存在的不计)。 |
long n = jedis.srem("tags", "java", "unused"); |
srem(byte[] key, byte[]... members) |
Long |
二进制版本,同上。 | long n = jedis.srem(b"tags", b"java"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
sismember(String key, String member) |
Boolean |
成员存在返回 true,否则 false。 |
boolean yes = jedis.sismember("tags", "redis"); |
sismember(byte[] key, byte[] member) |
Boolean |
二进制版本,同上。 | boolean yes = jedis.sismember(b"tags", b"redis"); |
示例代码:
java
private static void testSremAndSismember(Jedis jedis) {
System.out.println("------------SremAndSismember--------");
jedis.sadd("key", "111", "222", "3333");
System.out.println(jedis.srem("key", "111", "xxx"));
System.out.println(jedis.sismember("key", "111"));
System.out.println(jedis.sismember("key", "222"));
}
结果:

8.3 scard
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
scard(String key) |
Long |
获取集合 key 的元素数量;key 不存在返回 0。 |
long n = jedis.scard("tags"); |
scard(byte[] key) |
Long |
二进制版本,同上。 | long n = jedis.scard(b"tags"); |
示例代码:
java
private static void testScard(Jedis jedis) {
System.out.println("------------Scard--------");
jedis.sadd("key", "111", "222", "3333");
System.out.println(jedis.scard("key"));
}
结果:

8.4 sinter
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
sinter(String... keys) |
Set<String> |
计算并返回所有给定集合的交集;任一 key 不存在则结果为空 Set。 | Set<String> r = jedis.sinter("s1", "s2", "s3"); |
sinter(byte[]... keys) |
Set<byte[]> |
二进制版本,同上。 | Set<byte[]> r = jedis.sinter(b"s1", b"s2"); |
示例代码:
java
private static void testSinter(Jedis jedis) {
System.out.println("------------Sinter--------");
jedis.sadd("key", "111", "222", "3333");
jedis.sadd("key1", "111", "222", "444","555");
System.out.println(jedis.sinter("key","key1"));
}
结果:

8.5 sunion
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
sunion(String... keys) |
Set<String> |
计算并返回所有给定集合的并集;不存在的 key 视为空集。 | Set<String> r = jedis.sunion("s1", "s2", "s3"); |
sunion(byte[]... keys) |
Set<byte[]> |
二进制版本,同上。 | Set<byte[]> r = jedis.sunion(b"s1", b"s2"); |
示例代码:
java
private static void testSunion(Jedis jedis) {
System.out.println("------------Sunion--------");
jedis.sadd("key", "111", "222", "3333");
jedis.sadd("key1", "111", "222", "444","555");
System.out.println(jedis.sunion("key", "key1"));
}
结果:

8.6 sdiff
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
sunion(String... keys) |
Set<String> |
计算并返回所有给定集合的并集;不存在的 key 视为空集。 | Set<String> r = jedis.sunion("s1", "s2", "s3"); |
sunion(byte[]... keys) |
Set<byte[]> |
二进制版本,同上。 | Set<byte[]> r = jedis.sunion(b"s1", b"s2"); |
示例代码:
java
private static void testSdiff(Jedis jedis) {
System.out.println("------------Sdiff--------");
jedis.sadd("key", "111", "222", "3333");
jedis.sadd("key1", "111", "222", "444","555");
System.out.println(jedis.sdiff("key", "key1"));
}
结果:

九、有序集合ZSet
9.1 zadd 和 zrange
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zadd(String key, double score, String member) |
Long |
单成员添加/更新分数;返回 新增成员数(0 表示更新)。 | jedis.zadd("hits", 100, "post:1"); |
zadd(byte[] key, double score, byte[] member) |
Long |
二进制版本,同上。 | jedis.zadd(b"hits", 100, b"post:1"); |
zadd(String key, Map<String, Double> scoreMembers) |
Long |
批量添加/更新;Map 的 value 为分数。返回 新增成员数。 | jedis.zadd("hits", Map.of("p1", 90D, "p2", 95D)); |
zadd(byte[] key, Map<byte[], Double> scoreMembers) |
Long |
二进制批量版本,同上。 | jedis.zadd(b"hits", map); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zrange(String key, long start, long stop) |
List<String> |
按 分数从小到大 返回排名区间 [start, stop] 的成员(含两端);支持负下标。 |
List<String> top = jedis.zrange("hits", 0, 9); |
zrange(byte[] key, long start, long stop) |
List<byte[]> |
二进制版本,同上。 | List<byte[]> top = jedis.zrange(b"hits", 0, -1); |
zrangeWithScores(String key, long start, long stop) |
List<Tuple> |
同时返回分数:每个 Tuple 含成员+分数。 |
List<Tuple> list = jedis.zrangeWithScores("hits", 0, 2); |
zrangeWithScores(byte[] key, long start, long stop) |
List<Tuple> |
二进制版本,同上。 | List<Tuple> list = jedis.zrangeWithScores(b"hits", 0, 2); |
示例代码:
java
private static void testZaddAndZrange(Jedis jedis) {
System.out.println("------------ZaddAndZrange--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
System.out.println(jedis.zrange("key", 0, -1));
}
结果:

9.2 zrem 和 zcard
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zrem(String key, String... members) |
Long |
从有序集合 key 中删除给定成员,返回 实际删除的个数。 |
long n = jedis.zrem("hits", "post:1", "post:2"); |
zrem(byte[] key, byte[]... members) |
Long |
二进制版本,同上。 | long n = jedis.zrem(b"hits", b"post:1"); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zcard(String key) |
Long |
返回有序集合 key 的成员数量;key 不存在返回 0。 |
long size = jedis.zcard("hits"); |
zcard(byte[] key) |
Long |
二进制版本,同上。 | long size = jedis.zcard(b"hits"); |
示例代码:
java
private static void testZremAndZcard(Jedis jedis) {
System.out.println("------------ZremAndZcard--------");
Map<String, Double> members = new HashMap<>();
members.put("x1",1.0);
members.put("x2",2.0);
members.put("x3",3.0);
jedis.zadd("key",members);
System.out.println(jedis.zcard("key"));
System.out.println(jedis.zrem("key", "x1"));
System.out.println(jedis.zcard("key"));
}
结果:

9.3 zcount
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zcount(String key, double min, double max) |
Long |
返回有序集合 key 中分数在 [min, max] 闭区间内的成员个数。 |
long c = jedis.zcount("hits", 90, 100); |
zcount(byte[] key, double min, double max) |
Long |
二进制版本,同上。 | long c = jedis.zcount(b"hits", 90, 100); |
zcount(String key, String min, String max) |
Long |
字符串边界版本,支持 "-"、"+" 表示负/正无穷。 |
long c = jedis.zcount("hits", "-inf", "+inf"); |
zcount(byte[] key, byte[] min, byte[] max) |
Long |
二进制字符串边界版本,同上。 | long c = jedis.zcount(b"hits", b"-inf", b"+inf"); |
示例代码:
java
private static void testZcount(Jedis jedis) {
System.out.println("------------Zcount--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
jedis.zadd("key",5,"x5");
jedis.zadd("key",7,"x7");
jedis.zadd("key",21,"x21");
System.out.println(jedis.zcount("key", 0.0, 5.0));
System.out.println(jedis.zcount("key", 5.0, 55.0));
}
结果:

9.4 zpopmax 和 zpopmin
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zpopmin(String key) |
Tuple |
弹出 1 个分数最低的成员(含分数);集合空返回 null。 |
Tuple t = jedis.zpopmin("hits"); |
zpopmin(String key, int count) |
List<Tuple> |
一次弹出最多 count 个最低分数成员,按分数升序排列;不足则返回全部。 |
List<Tuple> bottom = jedis.zpopmin("hits", 3); |
zpopmin(byte[] key) |
Tuple |
二进制版本,单成员。 | Tuple t = jedis.zpopmin(b"hits"); |
zpopmin(byte[] key, int count) |
List<Tuple> |
二进制版本,多成员。 | List<Tuple> bottom = jedis.zpopmin(b"hits", 3); |
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zpopmax(String key) |
Tuple |
弹出 1 个分数最高的成员(含分数);集合空返回 null。 |
Tuple t = jedis.zpopmax("hits"); |
zpopmax(String key, int count) |
List<Tuple> |
一次弹出最多 count 个最高分数成员,按分数降序排列;不足则返回全部。 |
List<Tuple> top = jedis.zpopmax("hits", 3); |
zpopmax(byte[] key) |
Tuple |
二进制版本,单成员。 | Tuple t = jedis.zpopmax(b"hits"); |
zpopmax(byte[] key, int count) |
List<Tuple> |
二进制版本,多成员。 | List<Tuple> top = jedis.zpopmax(b"hits", 3); |
示例代码:
java
private static void testZpopmaxAndZpopmin(Jedis jedis) {
System.out.println("------------ZpopmaxAndZpopmin--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
System.out.println(jedis.zpopmin("key"));
System.out.println(jedis.zpopmax("key"));
}
结果:

9.5 zrank
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zrank(String key, String member) |
Long |
返回 member 的排名,从 0 开始;成员不存在返回 null。 |
Long r = jedis.zrank("hits", "post:100"); |
zrank(byte[] key, byte[] member) |
Long |
二进制版本,同上。 | Long r = jedis.zrank(b"hits", b"post:100"); |
示例代码:
java
private static void testZrank(Jedis jedis) {
System.out.println("------------Zrank--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
System.out.println(jedis.zrank("key", "x1"));
}
结果:

9.6 zscore
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zscore(String key, String member) |
Double |
返回 member 的分数;成员不存在返回 null。 |
Double s = jedis.zscore("hits", "post:100"); |
zscore(byte[] key, byte[] member) |
Double |
二进制版本,同上。 | Double s = jedis.zscore(b"hits", b"post:100"); |
示例代码:
java
private static void testZscore(Jedis jedis) {
System.out.println("------------Zrank--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
System.out.println(jedis.zscore("key", "x2"));
}
结果:

9.7 zincrby
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zincrby(String key, double increment, String member) |
Double |
将 member 的分数增加 increment(负值即减); 若成员不存在则先置 0 再计算;返回 新分数。 |
double newScore = jedis.zincrby("hits", 5.5, "post:100"); |
zincrby(byte[] key, double increment, byte[] member) |
Double |
二进制版本,同上。 | double newScore = jedis.zincrby(b"hits", -2.0, b"post:100"); |
示例代码:
java
private static void testZincrby(Jedis jedis) {
System.out.println("------------Zincrby--------");
jedis.zadd("key",1,"x1");
jedis.zadd("key",2,"x2");
jedis.zadd("key",3,"x3");
System.out.println(jedis.zincrby("key", 2.0, "x5"));
System.out.println(jedis.zscore("key", "x5"));
}
结果:

9.8 zinterstore
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zinterstore(String dstKey, String... sets) |
Long |
交集结果存入 dstKey;默认权重 1、分数相加;返回结果集大小。 |
long n = jedis.zinterstore("out", "s1", "s2"); |
zinterstore(String dstKey, ZParams params, String... sets) |
Long |
带权重 & 聚合方式(SUM/MIN/MAX)的交集计算;返回结果集大小。 | ZParams p = new ZParams().weights(2,3).aggregate(ZParams.Aggregate.MAX); long n = jedis.zinterstore("out", p, "s1", "s2"); |
zinterstore(byte[] dstKey, byte[]... sets) |
Long |
二进制版本,默认权重 1、分数相加。 | long n = jedis.zinterstore(b"out", b"s1", b"s2"); |
zinterstore(byte[] dstKey, ZParams params, byte[]... sets) |
Long |
二进制版本,带权重 & 聚合方式。 | long n = jedis.zinterstore(b"out", p, b"s1", b"s2"); |
示例代码:
java
private static void testZinterstore(Jedis jedis) {
System.out.println("------------Zinterstore--------");
jedis.zadd("key1",1,"x1");
jedis.zadd("key1",2,"x2");
jedis.zadd("key1",4,"x4");
jedis.zadd("key2",1,"x1");
jedis.zadd("key2",2,"x2");
jedis.zadd("key2",5,"x5");
jedis.zinterstore("key3", "key1", "key2");
System.out.println(jedis.zrange("key3", 0, -1));
}
结果:

9.9 zunionstore
| 方法签名 | 返回值 | 功能简述 | 示例 |
|---|---|---|---|
zunionstore(String dstKey, String... sets) |
Long |
并集结果存入 dstKey;默认权重 1、分数相加;返回结果集大小。 |
long n = jedis.zunionstore("out", "s1", "s2"); |
zunionstore(String dstKey, ZParams params, String... sets) |
Long |
带权重 & 聚合方式(SUM/MIN/MAX)的并集计算;返回结果集大小。 | ZParams p = new ZParams().weights(1,2).aggregate(ZParams.Aggregate.MIN); long n = jedis.zunionstore("out", p, "s1", "s2"); |
zunionstore(byte[] dstKey, byte[]... sets) |
Long |
二进制版本,默认权重 1、分数相加。 | long n = jedis.zunionstore(b"out", b"s1", b"s2"); |
zunionstore(byte[] dstKey, ZParams params, byte[]... sets) |
Long |
二进制版本,带权重 & 聚合方式。 | long n = jedis.zunionstore(b"out", p, b"s1", b"s2"); |
示例代码:
java
private static void testZunionstore(Jedis jedis) {
System.out.println("------------Zunionstore--------");
jedis.zadd("key1",1,"x1");
jedis.zadd("key1",2,"x2");
jedis.zadd("key1",4,"x4");
jedis.zadd("key2",1,"x1");
jedis.zadd("key2",2,"x2");
jedis.zadd("key2",5,"x5");
jedis.zunionstore("key3", "key1", "key2");
System.out.println(jedis.zrange("key3", 0, -1));
}
结果:





















































