HMGET
返回哈希表中一个或多个指定字段的值。
如果字段不存在,返回 nil。
如果 key 不存在,返回 nil。
Redis 原生命令语法
Section titled “Redis 原生命令语法”HMGET key field [field ...]参数说明
- key: 哈希表的键
- field: 要获取值的一个或多个字段
HMGET 命令用于获取存储在哈希表中一个或多个指定字段的值。它是 HGET 命令的批量版本,可以一次性获取多个字段的值,提高读取效率。
Redisun 使用方式
Section titled “Redisun 使用方式”在 redisun 中,HMGET 命令通过 HmGetCommand 类和 Redisun 类中的 hmget 方法实现。
Redisun redisun = Redisun.create(options -> { options.setAddress("redis://127.0.0.1:6379");});
// 先设置一些哈希表字段redisun.hset("user:1000", "name", "Alice");redisun.hset("user:1000", "email", "alice@example.com");redisun.hset("user:1000", "age", "25");
// 获取多个哈希表字段值List<String> fields = Arrays.asList("name", "email", "age");List<String> values = redisun.hmget("user:1000", fields);System.out.println("Name: " + values.get(0)); // 输出:AliceSystem.out.println("Email: " + values.get(1)); // 输出:alice@example.comSystem.out.println("Age: " + values.get(2)); // 输出:25
// 使用可变参数调用List<String> varargsValues = redisun.hmget("user:1000", "name", "email");System.out.println("Name: " + varargsValues.get(0)); // 输出:AliceSystem.out.println("Email: " + varargsValues.get(1)); // 输出:alice@example.com
// 获取部分不存在的字段List<String> partialFields = Arrays.asList("name", "phone", "age");List<String> partialValues = redisun.hmget("user:1000", partialFields);System.out.println("Name: " + partialValues.get(0)); // 输出:AliceSystem.out.println("Phone: " + partialValues.get(1)); // 输出:null (字段不存在)System.out.println("Age: " + partialValues.get(2)); // 输出:25
// 获取不存在的 key 的字段List<String> nonExistentValues = redisun.hmget("nonexistent", "name", "email");System.out.println("Non-existent: " + nonExistentValues); // 输出:[null, null]
// 异步版本CompletableFuture<List<String>> future = redisun.asyncHmget("user:1000", "name", "email");future.thenAccept(vals -> { System.out.println("Async Name: " + vals.get(0)); System.out.println("Async Email: " + vals.get(1));});- 返回值的顺序与请求字段的顺序一致
- 如果某个字段不存在,对应位置返回 null
- 如果 key 不存在,所有字段都返回 null
- HMGET 命令的时间复杂度为 O(N),其中 N 是请求字段的数量
- 相比多次调用 HGET,HMGET 可以减少网络往返次数,提高性能
- 适合批量读取对象的多个属性