ARGREP

使用文本谓词搜索范围内的数组元素。

语法

ARGREP key start end [AND | OR | LIMIT limit | WITHVALUES | NOCASE [...]]

引入版本:8.8.0

复杂度摘要:O(P * C)

使用文本谓词搜索范围内的数组元素并返回匹配元素的索引。范围内的空槽将被跳过。

必需参数

key

保存数组的键的名称。

start

开始搜索的从零开始的整数索引。特殊值 - 表示数组的第一个索引。如果 start 大于 end,则按相反索引顺序返回匹配项。

end

停止搜索的从零开始的整数索引(含)。特殊值 + 表示数组的最后一个索引。

predicate

一个或多个文本谓词,用于针对范围中的每个非空元素进行评估。每个谓词是以下之一:

  • EXACT string — 匹配值恰好等于 string 的元素。
  • MATCH string — 匹配其值包含 string 作为子字符串的元素。
  • GLOB pattern — 匹配其值与 glob 样式 pattern 匹配的元素(使用 *、? 和 [...] 通配符),与 KEYS 和 SCAN MATCH 使用的语法相同。
  • RE pattern — 匹配其值与正则表达式 pattern 匹配的元素。

当提供多个谓词时,使用 AND 或 OR 选项来控制它们的组合方式。默认为 OR。

可选参数

options

零个或多个以下修饰符:

  • AND — 使用逻辑 AND 组合多个谓词。仅当每个谓词都匹配时,元素才匹配。
  • OR — 使用逻辑 OR 组合多个谓词。如果任何谓词匹配,则元素匹配。这是默认设置。
  • LIMIT limit — 收集 limit 匹配后停止。 limit 必须是正整数。省略时,将返回范围内的所有匹配项。
  • WITHVALUES — 除了每个匹配索引之外,还返回匹配值。回复变成一个索引值对的数组,每个索引值对都是一个二元素数组。
  • NOCASE — 对 EXACT、MATCH、GLOB 和 RE 执行不区分大小写的比较。

示例

redis> ARMSET log 0 "boot: ok" 1 "warn: disk" 2 "ERROR: cpu" 3 "info: ready" 4 "error: net"
(integer) 5
redis> ARGREP log - + MATCH "error" NOCASE
1) (integer) 2
2) (integer) 4
redis> ARGREP log - + MATCH "error" NOCASE WITHVALUES
1) 1) (integer) 2
   2) "ERROR: cpu"
2) 1) (integer) 4
   2) "error: net"
redis> ARGREP log 0 4 GLOB "warn:*" OR GLOB "error:*"
1) (integer) 1
2) (integer) 4
redis> ARGREP log 0 4 RE "^[A-Za-z]+: (cpu|net)$" NOCASE WITHVALUES
1) 1) (integer) 2
   2) "ERROR: cpu"
2) 1) (integer) 4
   2) "error: net"
redis> ARGREP log 0 4 EXACT "info: ready"
1) (integer) 3
redis> ARGREP log - + MATCH "error" NOCASE LIMIT 1
1) (integer) 2

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
❌主动-主动
❌ 标准
❌主动-主动

返回值

RESP2

数组回复:匹配元素的索引,与遍历范围的顺序相同(start <= end 时升序,start > end 时降序)。当给出 WITHVALUES 时,索引值对数组,每个索引值对都是两元素数组:[[idx1, val1], [idx2, val2], ...]。当键不存在或没有元素匹配时,返回空数组。

RESP3

数组回复:匹配元素的索引,与遍历范围的顺序相同(start <= end 时升序,start > end 时降序)。当给出 WITHVALUES 时,索引值对数组,每个索引值对都是两元素数组:[[idx1, val1], [idx2, val2], ...]。当键不存在或没有元素匹配时,返回空数组。

资料来源:Redis 官方 ARGREP 文档;中文内容参考 Redis 文档许可。