前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【redis】Jedis 操作 Redis 基础指令(下)

【redis】Jedis 操作 Redis 基础指令(下)

作者头像
椰椰椰耶
发布2025-03-18 12:48:02
发布2025-03-18 12:48:02
8200
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

列表操作

lpush/rpush 和 lpop/rpop

  • 将一个或者多个元素从左/右侧放入(头/尾插)到 list
    • 依次头插
  • list 左/右侧取出元素(即头/尾删)
代码语言:javascript
代码运行次数:0
运行
复制
public static void test1(Jedis jedis) {  
    jedis.flushAll();  
      
    long n = jedis.lpush("key", "1", "2", "3", "4");  
    System.out.println(n);  
  
    String value = jedis.lpop("key");  
    System.out.println(value);  
  
    value = jedis.lpop("key");  
    System.out.println(value);  
  
    value = jedis.lpop("key");  
    System.out.println(value);  
  
    value = jedis.lpop("key");  
    System.out.println(value);  
}

//输出结果
4
4
3
2
1
  • 返回值:插入后 list 的长度

lrange

获取从 startend 区间的所有元素,左闭右闭

代码语言:javascript
代码运行次数:0
运行
复制
public static void test2(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.rpush("key", "1", "2", "3", "4");  
    List<String> values = jedis.lrange("key", 1, 3);  
    System.out.println(values);  
}

//输出结果
[2, 3, 4]
  • rpush,从右往左插入

blpop

  • 返回值 List 是一个二元组,[0] 表示 key[1] 表示 value
  • 超时时间设为 0 表示死等
  • 在执行同时,起一个 redis-cli,插入数据,即可以看到 blpop 的返回结果

**注意:**在代码中另起一个线程,直接通过当前 jedis 这个连接插入数据是不行的,必须另起一个 jedis 连接

代码语言:javascript
代码运行次数:0
运行
复制
public static void test3(Jedis jedis) {  
    jedis.flushAll();  
  
    while(true) {  
        List<String> values = jedis.blpop(0, "key");  
        System.out.println(values);  
    }  
}
image.png
image.png
image.png
image.png

lindex

代码语言:javascript
代码运行次数:0
运行
复制
public static void test4(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.rpush("key", "1", "2", "3", "4");  
    String value = jedis.lindex("key", 3);  
    System.out.println(value);  
}


//输出结果
4
  • 参数是元素的下标

linsert

将新元素插入到指定元素前/后

代码语言:javascript
代码运行次数:0
运行
复制
public static void test5(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.rpush("key", "a", "b", "c", "d");  
    jedis.linsert("key", ListPosition.BEFORE, "c", "100");  
    List<String> values = jedis.lrange("key", 0, -1);  
    System.out.println(values);  
}


//输出结果
[a, b, 100, c, d]
  • BEFOREListPostion.BEFORE
  • AFTERListPPostion.BEFORE

llen

获取 list 的长度

代码语言:javascript
代码运行次数:0
运行
复制
public static void test6(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.rpush("key", "1", "2", "3", "4");  
    long n = jedis.llen("key");  
    System.out.println(n);  
}

//返回结果
4

哈希表操作

hset 和 hget

代码语言:javascript
代码运行次数:0
运行
复制
public static void test1(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.hset("key", "name", "zhangsan");  
    jedis.hset("key", "age", "20");  
    String name = jedis.hget("key", "name");  
    System.out.println(name);  
    String age = jedis.hget("key", "age");  
    System.out.println(age);  
}

//输出结果
zhangsan
20

hexists 和 hdel

代码语言:javascript
代码运行次数:0
运行
复制
public static void test2(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.hset("key", "name", "zhangsan");  
    boolean ok = jedis.hexists("key", "name");  
    System.out.println(ok);  
  
    jedis.hdel("key", "name");  
    ok = jedis.hexists("key", "name");  
    System.out.println(ok);  
}
  • hdel 删除的是 field
  • del 删除的是 key

hkeys 和 hval

  • hkeys:获取所有 key
  • hval:获取所有 value
代码语言:javascript
代码运行次数:0
运行
复制
public static void test3(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.hset("key", "name", "zhangsan");  
    jedis.hset("key", "age", "20");  
  
    Set<String> keys = jedis.hkeys("key");  
    System.out.println(keys);  
  
    List<String> values = jedis.hvals("key");  
    System.out.println(values);  
}


//输出结果
[name, age]
[zhangsan, 20]

hmget

一次获取 hash 中多个字段的值

代码语言:javascript
代码运行次数:0
运行
复制
public static void test4(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.hset("key", "name", "zhangsan");  
    jedis.hset("key", "age", "20");  
    jedis.hset("key", "gender", "man");  
    List<String> values = jedis.hmget("key", "name", "age", "gender", "hh", "kk");  
    System.out.println(values);  
}


//输出结果:[zhangsan, 20, man, null, null]

hlen

获取 hash 中的所有字段的个数

代码语言:javascript
代码运行次数:0
运行
复制
public static void test5(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.hset("key", "name", "zhangsan");  
    jedis.hset("key", "age", "20");  
    long n = jedis.hlen("key");  
    System.out.println(n);  
}

//输出结果:2

hincrby 和 hincrbyfloate

代码语言:javascript
代码运行次数:0
运行
复制
public static void test6(Jedis jedis) {  
    jedis.hset("key", "age", "20");  
    long n = jedis.hincrBy("key", "age", 10);  
    System.out.println(n);  
    String value = jedis.hget("key", "age");  
    System.out.println(value);  
  
    double dn = jedis.hincrByFloat("key", "age", 5.5);  
    System.out.println(dn);  
    value = jedis.hget("key", "age");  
    System.out.println(value);  
}


//输出结果
30
30
35.5
35.5

集合操作

sadd 和 smembers

  • 将一个或者多个元素添加到 set 中,重复的元素无法添加到 set
  • 获取一个 set 中的所有元素,**元素之间的顺序是无序的!!!
代码语言:javascript
代码运行次数:0
运行
复制
public static void test1(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key", "aaa", "bbb", "ccc");  
    Set<String> members = jedis.smembers("key");  
    System.out.println(members);  
}


//返回结果:[aaa, ccc, bbb]

srem 和 sismember

  • 将制定的元素从 set 中删除
  • 用于检查元素是否属于集合 set
代码语言:javascript
代码运行次数:0
运行
复制
public static void test2(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key", "aaa", "bbb", "ccc");  
    boolean ok = jedis.sismember("key", "aaa");  
    System.out.println(ok);  
    long n = jedis.srem("key", "aaa", "bbb");  
    System.out.println(n);  
  
    ok = jedis.sismember("key", "aaa");  
    System.out.println(ok);  
}


//运行结果
true
2
false

scard

获取一个 set 的基数(cardinality),即 set 中的元素个数

代码语言:javascript
代码运行次数:0
运行
复制
public static void test3(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key", "aaa", "bbb", "ccc");  
    long n = jedis.scard("key");  
    System.out.println(n);  
}

//输出结果
3

sinter

获取给定 set 的交集中的元素

代码语言:javascript
代码运行次数:0
运行
复制
public static void test4(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key1", "aaa", "bbb", "ccc");  
    jedis.sadd("key2", "aaa", "bbb", "ddd");  
  
    Set<String> results = jedis.sinter("key1", "key2");  
    System.out.println(results);  
}


//输出结果
[aaa, bbb]

sunion

获取给定 set 的并集中的元素

代码语言:javascript
代码运行次数:0
运行
复制
public static void test5(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key1", "aaa", "bbb", "ccc");  
    jedis.sadd("key2", "aaa", "bbb", "ddd");  
  
    Set<String> results = jedis.sunion("key1", "key2");  
    System.out.println(results);  
}


//输出结果
[aaa, ccc, bbb, ddd]

sdiff

获取给定 set 的差集中的元素

代码语言:javascript
代码运行次数:0
运行
复制
public static void test6(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.sadd("key1", "aaa", "bbb", "ccc");  
    jedis.sadd("key2", "aaa", "bbb", "ddd");  
  
    Set<String> results = jedis.sdiff("key1", "key2");  
    System.out.println(results);  
}

//输出结果
[ccc]

有序集合操作

zadd 和 zrange

代码语言:javascript
代码运行次数:0
运行
复制
public static void test1(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    List<String> members = jedis.zrange("key", 0, -1);  
    System.out.println(members);  
	
	List<Tuple> membersWithScore = jedis.zrangeWithScores("key", 0, -1);  
	System.out.println(membersWithScore);
}


//输出结果
[刘备, 关羽, 典韦, 赵云, 吕布]
[[刘备,70.0], [关羽,92.0], [典韦,95.0], [赵云,98.0], [吕布,100.0]]
  • 如果需要逆序输出,只要使用 ZREVRANGE 即可

zrem 和 zcard

  • 删除指定元素
  • 获取一个 zset 的计数,即元素个数
代码语言:javascript
代码运行次数:0
运行
复制
public static void test2(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    long n = jedis.zcard("key");  
    System.out.println(n);  
  
    n = jedis.zrem("key", "吕布", "赵云");  
    System.out.println(n);  
    n = jedis.zcard("key");  
    System.out.println(n);  
}


//输出结果
5
2
3
  • zrem 返回的是删除成功的元素个数

zcount

返回分数在 minmax 之间元素的个数,默认情况下 minmax 都是包含的,可以通过 () 排除

代码语言:javascript
代码运行次数:0
运行
复制
public static void test3(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    long n = jedis.zcount("key", 92, 98);  
    System.out.println(n);  
}


//输出结果
3
  • 闭区间

zpopmax 和 zpopmin

删除并返回分数最高/最低count 个元素

代码语言:javascript
代码运行次数:0
运行
复制
public static void test4(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    Tuple tuple = jedis.zpopmax("key");  
    System.out.println(tuple);  
  
    tuple = jedis.zpopmin("key");  
    System.out.println(tuple);  
}


//返回结果
[吕布,100.0]
[刘备,70.0]

zrank

  • 获取指定 member 的下标
代码语言:javascript
代码运行次数:0
运行
复制
public static void test5(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    long n = jedis.zrank("key", "赵云");  
    System.out.println(n);  
  
    n = jedis.zrevrank("key", "赵云");  
    System.out.println(n);  
}


//输出结果
3
1
  • 分别是从前往后和从后往前

zscore

  • 返回指定元素的分数
代码语言:javascript
代码运行次数:0
运行
复制
public static void test6(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
    jedis.zadd("key", 98, "赵云");  
    jedis.zadd("key", 95, "典韦");  
    jedis.zadd("key", 92, "关羽");  
    jedis.zadd("key", 70, "刘备");  
  
    double score = jedis.zscore("key", "赵云");  
    System.out.println(score);  
}


//输出结果
98.0

zincrby

代码语言:javascript
代码运行次数:0
运行
复制
public static void test7(Jedis jedis) {  
    jedis.flushAll();  
  
    jedis.zadd("key", 100, "吕布");  
  
    double n = jedis.zincrby("key", 10, "吕布");  
    System.out.println(n);  
  
    n = jedis.zincrby("key", -20, "吕布");  
    System.out.println(n);  
}


//输出结果
110.0
90.0

zinterstore

求交集,结果保存到另一个 key

代码语言:javascript
代码运行次数:0
运行
复制
public static void test8(Jedis jedis) {  
    jedis.flushAll();  
      
    jedis.zadd("key1", 100, "吕布");  
    jedis.zadd("key1", 98, "赵云");  
    jedis.zadd("key1", 95, "典韦");  
  
    jedis.zadd("key2", 100, "吕布");  
    jedis.zadd("key2", 98, "赵云");  
    jedis.zadd("key2", 92, "关羽");  
  
    long n = jedis.zinterstore("key3", "key1", "key2");  
    System.out.println(n);  
    List<Tuple> tuples = jedis.zrangeWithScores("key3", 0, -1);  
    System.out.println(tuples);  
}


//输出结果
2
[[赵云,196.0], [吕布,200.0]]
  • key1key2 中交集部分,放到 key3

总结

Jedis 这个库的本质就是针对 redis 的各种命令进行封装。调用某个方法,就相当于在 redis 客户端中敲下了对应的命令

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 列表操作
    • lpush/rpush 和 lpop/rpop
    • lrange
    • blpop
    • lindex
    • linsert
    • llen
  • 哈希表操作
    • hset 和 hget
    • hexists 和 hdel
    • hkeys 和 hval
    • hmget
    • hlen
    • hincrby 和 hincrbyfloate
  • 集合操作
    • sadd 和 smembers
    • srem 和 sismember
    • scard
    • sinter
    • sunion
    • sdiff
  • 有序集合操作
    • zadd 和 zrange
    • zrem 和 zcard
    • zcount
    • zpopmax 和 zpopmin
    • zrank
    • zscore
    • zincrby
    • zinterstore
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档