Python操作Redis存储列表数据时出现WRONGTYPE错误的问题求助
Python操作Redis存储列表数据时出现WRONGTYPE错误的问题求助
你遇到的这个错误其实是Redis最常见的类型不匹配问题,核心原因很简单:你用了错误的命令去访问列表类型的Key。
为什么会报错?
Redis是强类型的键值数据库,每个Key都对应固定的数据类型,不同类型的Key只能用对应类型的命令操作:
- 你用
LPUSH创建的是**list(列表)**类型的Key - 而你在CLI里用的
GET命令,只能用来读取**string(字符串)**类型的Key,用它去访问列表类型的Key,Redis就会抛出WRONGTYPE Operation against a key holding the wrong kind of value错误,这是完全符合预期的行为。
正确的查看方式
在Redis CLI里,要查看列表类型的内容,你需要用LRANGE命令:
127.0.0.1:6379> LRANGE "stock|BINANCE:BTCUSDT|bars|1m" 0 -1
这个命令的含义是:获取指定列表从索引0到最后一个元素(-1代表最后一个索引)的所有内容,返回结果就是你序列化后存入的JSON字符串元素列表。
如果只想查看前N个元素,可以调整索引参数,比如查看前10个:
127.0.0.1:6379> LRANGE "stock|BINANCE:BTCUSDT|bars|1m" 0 9
关于你的代码的小确认
看了你的Python代码,逻辑上是没问题的:
- 先检查Key的类型,若不是list或none就删除,避免类型冲突,这个前置处理很稳妥
- 用Pipeline批量执行
LPUSH+LTRIM,既保证原子性,又能高效保留最近1440条数据(对应1分钟粒度的日K数据量) - 用
orjson序列化后转成字符串存入列表,也是正确的操作方式
另外,你可以在CLI里先确认下Key的类型,验证和代码里的检查逻辑一致:
127.0.0.1:6379> TYPE "stock|BINANCE:BTCUSDT|bars|1m" # 应该返回 "list"
内容来源于stack exchange




