如何通过Jedis客户端原子性更新RedisJSON的多个字段?
Jedis结合RedisJSON一次性更新多个字段的方案
RedisJSON的JSON.SET命令原生支持一次性更新多个路径对应的字段,Jedis客户端提供了对应的重载方法,能让你用一次请求完成多字段更新,既保证原子性(Redis单命令天然原子),又减少网络开销提升性能。
实现代码示例
// 初始化Jedis连接(生产环境推荐用JedisPool管理连接) Jedis jedis = new Jedis("localhost", 6379); // 构建需要更新的路径与对应值的映射 Map<Path, Object> updateMap = new HashMap<>(); updateMap.put(Path.of("phone"), "9876"); updateMap.put(Path.of("address"), "Shiraz"); // 一次性执行多字段更新 jedis.jsonSet("PERSON_1", updateMap); // 关闭连接(池化场景下改为归还连接到池) jedis.close();
可选:添加更新条件
如果需要指定更新的约束(比如仅当键存在时更新、仅当键不存在时更新),可以搭配JsonSetParams使用:
// XX参数:仅目标键已存在时执行更新 JsonSetParams params = new JsonSetParams().xx(); jedis.jsonSet("PERSON_1", updateMap, params);
关键说明
- 该方式仅发起一次Redis请求,避免了两次请求带来的网络往返开销
- Redis单命令具备原子性,所以多字段更新的操作是原子执行的,不会出现部分更新成功的情况
内容的提问来源于stack exchange,提问作者Zabihullah Alipour
相关产品推荐
相关产品推荐

