如何在Python中使用RedisJSON模块从Redis获取含ID的指定记录
使用RedisJSON在Python中检索指定条件的完整记录
前提准备
- 确保Redis服务器已安装RedisJSON模块(可通过
redis-cli MODULE LIST命令检查) - 安装Python依赖包:
pip install redis redisjson
实现方案
方案1:全量获取后本地过滤(适合数据量较小场景)
直接拉取monitor键下的所有数据,在Python本地过滤符合release条件的条目,代码简洁直观:
from redis import Redis # 连接Redis,根据实际环境修改配置 redis_client = Redis(host='localhost', port=6379, db=0, decode_responses=True) # 获取monitor下的完整JSON数据 monitor_records = redis_client.json().get('monitor') # 过滤出release为'23.4.6'的记录(包含ID) target_records = { record_id: details for record_id, details in monitor_records.items() if details.get('release') == '23.4.6' } print(target_records) # 输出:{'106521149': {'status': 'Screen', 'release': '23.4.6'}}
方案2:分步查询减少内存占用(适合数据量较大场景)
先获取所有ID,再逐个查询每个ID对应的release值,仅保留符合条件的完整记录,避免一次性加载大量数据:
from redis import Redis from redis.commands.json.path import Path redis_client = Redis(host='localhost', port=6379, db=0, decode_responses=True) # 获取monitor下的所有ID键 all_ids = redis_client.json().get('monitor', Path('$keys')) target_records = {} for record_id in all_ids: # 查询当前ID的release值 current_release = redis_client.json().get('monitor', Path(f'$.{record_id}.release')) if current_release == '23.4.6': # 获取该ID的完整记录 full_record = redis_client.json().get('monitor', Path(f'$.{record_id}')) target_records[record_id] = full_record print(target_records) # 输出:{'106521149': {'status': 'Screen', 'release': '23.4.6'}}
说明
- 方案1代码更简洁,适合数据量不大的场景;方案2通过多次小查询降低内存消耗,适合大规模数据场景。
decode_responses=True会自动将Redis返回的字节串转为字符串,避免手动解码。
内容的提问来源于stack exchange,提问作者smm
相关产品推荐
相关产品推荐

