【问题标题】:TYPE option does not work for REDIS SCAN commandTYPE 选项不适用于 REDIS SCAN 命令
【发布时间】:2019-08-15 07:50:59
【问题描述】:

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

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

接下来是我的问题。 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


    【解决方案1】:

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

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

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

    为了让这个操作更快,你可以把逻辑包装成一个Lua脚本。

    更新

    Redis 6.0 已经支持此功能。

    【讨论】:

    • 是的,这就是我实际所做的:)
    • Lua 示例见this answer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多