如何在Redis中实现整数到列表的映射?
解决Redis中存储列表的问题
Redis的SET命令仅支持存储字符串、数字、字节这类基础类型,直接传入Python列表必然报错。要实现r_id -> [d_id,l_id,in_state]的映射,有以下几种实用方案:
方案1:JSON序列化存储
将Python序列转成JSON字符串存入Redis,取出时再反序列化为列表,这是最通用的做法:
import json # 存储 r.set(r_id, json.dumps([d_id, l_id, in_state]), ex=10) # 读取 result = json.loads(r.get(r_id)) if r.get(r_id) else []
方案2:用Redis哈希表(HASH)存储
如果这三个值有明确业务含义,可将它们作为哈希表的字段存储,优势是能单独获取某个值,无需读取全部内容:
# 存储 r.hset(r_id, mapping={"d_id": d_id, "l_id": l_id, "in_state": in_state}) # 为键设置过期时间(哈希表本身无法直接设过期,需单独给键配置) r.expire(r_id, 10) # 读取全部字段(转换为Python可直接使用的格式) result = {k.decode(): int(v) if v.isdigit() else v.decode() for k, v in r.hgetall(r_id).items()} # 读取单个字段 d_id_val = r.hget(r_id, "d_id")
方案3:用Redis列表(LIST)存储
如果需要严格保持元素顺序,或后续可能往序列中追加元素,可直接使用Redis的列表结构:
# 存储(将三个值依次推入列表) r.rpush(r_id, d_id, l_id, in_state) # 设置过期时间 r.expire(r_id, 10) # 读取整个列表(转换为对应数据类型) result = [int(item) if item.isdigit() else item.decode() for item in r.lrange(r_id, 0, -1)]
具体选哪种方案取决于你的业务需求:JSON适合快速序列化/反序列化;哈希表适合需要单独操作某个元素的场景;列表适合维护序列顺序或动态追加元素的情况。
内容的提问来源于stack exchange,提问作者Akilesh
相关产品推荐
相关产品推荐

