【Redis】Java客户端使用Redis

目录

  • 一、引入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,有以下三种方法:

  1. 服务器防火墙开放Redis端口6379,可能会被攻击;
  2. 将本地程序打jar包,放到服务器上运行;
  3. 使用ssh端口转发的方式,将服务器的Redis端口映射到本地。

我们此处使用的是方法3

在 xshell 中,进⾏如下配置(我们在前面配置Redis服务器的时候,将绑定IP 相关的 bing属性配置为0.0.0.0,并且关闭了保护模式protected-mode配置为no):

  1. 右键云服务器的会话,选择属性
  2. 找到隧道 -> 配置转移规则
  1. 使⽤该会话连接服务器
  2. 本地验证 使用netstat命令

三、连接Redis服务器

  1. 使⽤ JedisPool 描述 Redis 服务器的位置 ,使⽤ url 来表⽰ JedisPool jedisPool = new JedisPool("tcp://127.0.0.1.6379");
  2. 使⽤ getResource 和 服务器建⽴连接Jedis jedis = jedisPool.getResource()
  3. 连接使⽤完毕需要 close 关闭,也可以直接使⽤ try ⾃动关闭
  4. 通过 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 返回列表 keyindex 位置的元素;支持负下标(-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 的元素 前/后whereListPosition.BEFOREAFTER。 返回插入后列表长度;若 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));

    }

结果:

相关推荐
悦悦子a啊3 小时前
使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文
java·开发语言
Lucky小小吴3 小时前
java代码审计入门篇——Hello-Java-Sec(完结)
java·开发语言
一个想打拳的程序员3 小时前
无需复杂配置!用%20docker-webtop%20打造跨设备通用%20Linux%20桌面,加载cpolar远程访问就这么简单
java·人工智能·docker·容器
一起养小猫3 小时前
LeetCode100天Day2-验证回文串与接雨水
java·leetcode
清晓粼溪3 小时前
Java登录认证解决方案
java·开发语言
液态不合群3 小时前
查找算法详解
java·数据结构·算法
雨中飘荡的记忆3 小时前
观察者模式:从理论到生产实践
java·设计模式
北城以北88883 小时前
SpringBoot--Redis基础知识
java·spring boot·redis·后端·intellij-idea
wniuniu_3 小时前
ceph中的rbd的稀疏写入
java·服务器·数据库