You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:15:36