首页 > 解决方案 > TYPE 选项不适用于 REDIS SCAN 命令

问题描述

Redis中有一个命令-SCAN。它有一个选项TYPE,它返回与给定类型匹配的对象。当我尝试运行示例https://redis.io/commands/scan#the-type-option中提供的命令集时,我在运行最后一个命令时收到错误ERR 语法错误SCAN 0 TYPE zset

我已经准备了listzset类型的对象,但是它们都不起作用,我总是遇到异常。即使我自己添加一些东西,它也不起作用。

我的问题是下一个。SCAN是否真的支持TYPE选项?我发现了这个问题https://github.com/antirez/redis/issues/3323,但它没有关闭,在 Redis 文档上有这样的细节

Redis 版本:

redis> INFO
# Server
redis_version:5.0.5
redis> RPUSH list_object "list_element"
redis> TYPE list_object
list
redis> ZADD zset_object 1 "zset_element"
redis> TYPE zset_object
zset
redis> SCAN 0 TYPE zset
ERR syntax error
redis> SCAN 0 type list
ERR syntax error

标签: redis

解决方案


TYPE 选项的代码还在unstable 分支中,还没有发布到最新版本的Redis。到目前为止,您无法使用该命令。您必须等待新版本支持此功能,或者冒险使用不稳定的分支。

但是,您也可以在客户端实现此目标:

  1. 使用 SCAN 命令迭代密钥空间
  2. 对于每个键,调用 type 命令在客户端进行过滤。

为了使这个操作更快,你可以将逻辑包装到 Lua 脚本中。

更新

Redis 6.0 已经支持这个特性。


推荐阅读