如何使用redis.Redis方法存储嵌套结构的Python字典?
如何将嵌套Python字典存入Redis
当然可以把这种嵌套字典存入Redis啦!不过Redis本身只支持字符串、哈希、列表等基础数据结构,没法直接存储Python的嵌套字典对象,所以我们需要先把它序列化成Redis能识别的格式,最常用的两种方式是JSON和pickle,下面给你具体的实现步骤:
方法一:使用JSON序列化(推荐,跨语言兼容)
JSON是通用的数据交换格式,序列化后的字符串可读性强,而且其他编程语言也能轻松解析,适合需要跨语言访问Redis数据的场景。
实现代码
import json import redis # 你的嵌套字典 expected_value = { 'status': 'paid', 'quantity': 1, 'faturas': { 'B68D736C0DF84C459DED3CD84F18E388': { 'fatura_due_date': '2020-11-11', 'customer_id': '0A9CA75877564E0894DAD774E0CB09DA' } } } # 连接Redis(根据你的实际配置调整参数,比如host、port、password等) r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=False) # 1. 将字典序列化为JSON字符串 serialized_data = json.dumps(expected_value) # 2. 存入Redis,指定一个键名(比如'order:123:details',根据你的业务命名) r.set('order:expected_value', serialized_data) # 3. 从Redis取出并反序列化为字典 retrieved_data = r.get('order:expected_value') if retrieved_data: parsed_dict = json.loads(retrieved_data) print(parsed_dict) # 可以正常访问嵌套结构 print(parsed_dict['faturas']['B68D736C0DF84C459DED3CD84F18E388']['customer_id'])
方法二:使用Pickle序列化(仅Python环境适用)
Pickle是Python专属的序列化工具,能直接序列化几乎所有Python对象,但序列化后的结果是二进制数据,其他语言无法解析,适合只在Python生态中使用Redis的场景。
实现代码
import pickle import redis # 你的嵌套字典 expected_value = { 'status': 'paid', 'quantity': 1, 'faturas': { 'B68D736C0DF84C459DED3CD84F18E388': { 'fatura_due_date': '2020-11-11', 'customer_id': '0A9CA75877564E0894DAD774E0CB09DA' } } } # 连接Redis r = redis.Redis(host='localhost', port=6379, db=0) # 1. 将字典序列化为二进制数据 serialized_data = pickle.dumps(expected_value) # 2. 存入Redis r.set('order:expected_value_pickle', serialized_data) # 3. 取出并反序列化 retrieved_data = r.get('order:expected_value_pickle') if retrieved_data: parsed_dict = pickle.loads(retrieved_data) print(parsed_dict)
注意事项
- 如果你的字典里包含JSON无法序列化的Python专属对象(比如datetime、自定义类实例),那Pickle会更合适,但要注意Pickle的安全性,不要反序列化不可信的数据。
- 如果你只想把字典的顶层键值对存入Redis哈希结构,那可以用
r.hset(),但嵌套的子字典还是需要先序列化,否则Redis哈希的value只能是字符串/数字类型,没法直接存储嵌套结构,所以这种情况下不如直接整个序列化存字符串更简单。
内容的提问来源于stack exchange,提问作者Andressa Cabistani
相关产品推荐
相关产品推荐

