You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动