【Redis】 Java操作客户端命令——列表操作与哈希操作

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis】 Java操作客户端命令——列表操作与哈希操作

🍃前言

本篇文章重点是,介绍一些Java 操作 Redis 的常见命令的使用。

总体分为以下6个部分进行介绍:

  1. 基础操作
  2. 字符串操作
  3. 列表操作
  4. 哈希表操作
  5. 集合操作
  6. 有序集合操作

本篇演示以下两种用法:

  1. 列表操作
  2. 哈希表操作

🌴列表操作

准备工作代码如下:

public class ListDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()){
            //清空redis数据库
            jedis.flushAll();
            //testLpushAndLpop(jedis);
            //testRpushAndRpop(jedis);
            //testLrange(jedis);
            //testBLpop(jedis);
            //testBRpop(jedis);
            //testLindex(jedis);
            //testLlen(jedis);
        }
    }
}

这里博主只展示如何使用 Java 操作完成这些命令操作,如果有小伙伴对这部分命令作用不了解,可以参考博主写的【Redis】 关于Redis列表类型

🚩lpush 和 lpop

  • lpush:将⼀个或者多个元素从左侧放⼊(头插)到 list 中。
  • lpoop:从 list 左侧取出元素(即头删)

测试代码如下:

public static void testLpushAndLpop(Jedis jedis) {
    System.out.println("测试 lpush 和 lpop");
    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);
    value = jedis.lpop("key");
    System.out.println(value);
}

执行结果如下:

🚩rpush 和 rpop

  • rpush:将⼀个或者多个元素从右侧放⼊(尾插)到 list 中
  • rpop:从 list 右侧取出元素(即尾删)

测试代码如下:

private static void testRpushAndRpop(Jedis jedis) {
    System.out.println("测试 rpush 与 rpop");
    long n = jedis.rpush("key", "1", "2", "3", "4");
    System.out.println(n);
    String value = jedis.rpop("key");
    System.out.println(value);
    value = jedis.rpop("key");
    System.out.println(value);
    value = jedis.rpop("key");
    System.out.println(value);
    value = jedis.rpop("key");
    System.out.println(value);
    value = jedis.rpop("key");
    System.out.println(value);
}

执行结果如下:

🚩lrange

  • lrange:获取从 start 到 end 区间的所有元素,左闭右闭。

测试代码如下:

private static void testLrange(Jedis jedis) {
    jedis.rpush("key", "1", "2", "3", "4");
    List<String> values = jedis.lrange("key", 1, 3);
    System.out.println(values);
}

执行结果如下:

🚩bloop

  • bloop:lpoop的阻塞版本,返回值 List 是个⼆元组.。[0] 表⽰ key, [1] 表⽰ value

超时时间设为 0 表⽰死等,在执⾏同时,起⼀个 redis-cli,插⼊数据,即可看到 blpop的返回结果

测试代码如下:

private static void testBLpop(Jedis jedis) {
    System.out.println("测试 bloop");
    while (true) {
        List<String> values = jedis.blpop(0, "key");
        System.out.println(values);
    }
}

另起一个客户端插入数据

执行结果如下:

🚩brpop

使用方式与bloop类似

测试代码如下:

private static void testBRpop(Jedis jedis) {
    System.out.println("开始调⽤ brpop");
    while (true) {
        List<String> values = jedis.brpop(0, "key");
        System.out.println(values);
    }
}

调用Redis客户端

执行结果如下:

🚩lindex

  • lindex:获取从左数第 index 位置的元素

测试代码如下:

private static void testLindex(Jedis jedis) {
    System.out.println("测试 lindex");
    jedis.rpush("key", "1", "2", "3", "4");
    String value = jedis.lindex("key", 2);
    System.out.println(value);
}

执行结果

🚩linsert

  • linsert:通过 ListPosition.BEFORE 和 ListPosition.AFTER 标识插⼊位置

测试代码如下:

private static void testLinsert(Jedis jedis) {
    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);
}

执行结果如下:

🚩llen

  • llen:获取 list 的长度

测试代码如下:

private static void testLlen(Jedis jedis) {
    jedis.rpush("key", "a", "b", "c", "d");
    long n = jedis.llen("key");
    System.out.println(n);
}

执行结果如下:

🎋哈希操作

准备工作代码如下:

public class HashDemo {
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()) {
            //清空redis数据库
            jedis.flushAll();
            //以下为测试方法
            //testHsetAndHget(jedis);
            //testHexistsAndHdel(jedis);
            //testHkeysAndHvalues(jedis);
            //testHmget(jedis);
            //testHIncrByAndHincrByFloat(jedis);
        }
    }
}

这里博主只展示如何使用 Java 操作完成这些命令操作,如果有小伙伴对这部分命令作用不了解,可以参考博主写的【Redis】 关于 Redis 哈希类型

🚩hset 和 hget

  • hset:设置 hash 中指定的字段(field)的值(value)。
  • hget:获取hash中指定字段的值

测试代码如下:

private static void testHsetAndHget(Jedis jedis) {
    System.out.println("测试 hset and hget");
    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);
}

执行结果如下:

🚩hexists 和 hdel

  • hexists:判断 hash 中是否有指定的字段。
  • hdel:删除 hash 中指定的字段

测试代码如下:

private static void testHexistsAndHdel(Jedis jedis) {
    System.out.println("测试hexists 和 hdel");
    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);
}

执行结果如下:

🚩hkeys 和 hvals

  • hkeys:获取 hash 所有字段
  • hvals:获取 hash 中的所有的值

测试代码如下:

private static void testHkeysAndHvalues(Jedis jedis) {
    System.out.println("测试 hkeys 和 hvalues");
    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);
}

执行结果如下:

🚩hmget

  • hmget:⼀次获取 hash 中多个字段的值

测试代码:

private static void testHmget(Jedis jedis) {
    System.out.println("测试 hmget");
    jedis.hset("key", "name", "zhangsan");
    jedis.hset("key", "age", "20");
    List<String> values = jedis.hmget("key", "name", "age");
    System.out.println(values);
}

执行结果如下:

🚩hlen

  • hlen:获取 hash 中的所有字段的个数。

测试代码如下:

private static void testHlen(Jedis jedis) {
    System.out.println("测试 hlen");
    jedis.hset("key", "name", "zhangsan");
    jedis.hset("key", "age", "20");
    long n = jedis.hlen("key");
    System.out.println(n);
}

执行结果如下:

🚩hincrby 和 hincrbyfloat

  • hincrby:将 hash 中字段对应的数值添加指定的值
  • hincrbyfloat:hincrby的浮点数版本

测试代码如下:

private static void testHIncrByAndHincrByFloat(Jedis jedis) {
    System.out.println("测试 hincrby 与 hincrbyfloat");
    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", 0.5);
    System.out.println(dn);
    value = jedis.hget("key", "age");
    System.out.println(value);
}

执行结果如下:

⭕总结

关于《【Redis】 Java操作客户端命令——列表操作与哈希操作》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
2
2
0
28
分享
相关文章
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
90 8
Redis设计与实现——Redis命令参考与高级特性
Redis 是一个高性能的键值存储系统,支持丰富的数据类型(字符串、列表、哈希、集合等)和多种高级功能。本文档涵盖 Redis 的核心命令分类,包括数据类型操作、事务与脚本、持久化、集群管理、系统监控等。特别介绍了事务的原子性特性、Lua 脚本的执行方式及优势、排序机制、发布订阅模型以及慢查询日志和监视器工具的使用方法。适用于开发者快速掌握 Redis 常用命令及其应用场景,优化系统性能与可靠性。
Redis中的常用命令-get&set&keys&exists&expire&ttl&type的详细解析
总的来说,这些Redis命令提供了处理存储在内存中的键值对的便捷方式。通过理解和运用它们,你可以更有效地在Redis中操作数据,使其更好地服务于你的应用。
233 17
Redis的基本介绍和安装方式(包括Linux和Windows版本),以及常用命令的演示
Redis(Remote Dictionary Server)是一个高性能的开源键值存储数据库。它支持字符串、列表、散列、集合等多种数据类型,具有持久化、发布/订阅等高级功能。由于其出色的性能和广泛的使用场景,Redis在应用程序中常作为高速缓存、消息队列等用途。
660 16
Redis的基本特性以及其基础命令用法
这只是冰山一角,Redis的强大功能和简洁的操作方法值得我们深入了解和掌握,是复杂数据问题解决的有力工具。所以,来一场有趣的Redis冒险吧!
119 6
|
2月前
|
在Rocky9系统上安装并使用redis-dump和redis-load命令的指南
以上步骤是在Rocky9上使用redis-dump和redis-load命令顺利出行的秘籍。如果在实行的过程中,发现了新的冒险和挑战,那么就像一个勇敢的航海家,本着探索未知的决心,解决问题并前进。
68 14
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
122 13
|
4月前
|
Redis如何优化频繁命令往返造成的性能瓶颈?
频繁的命令往返是Redis性能优化中需要重点关注的问题。通过使用Pipeline、Lua脚本、事务、合并命令、连接池以及合理设置网络超时,可以有效减少网络往返次数,优化Redis的性能。这些优化措施不仅提升了Redis的处理能力,还能确保系统在高并发情况下的稳定性和可靠性。
106 14
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问