【问题标题】:Redis SCAN command returning keys that don't match patternRedis SCAN 命令返回不匹配模式的键
【发布时间】:2018-02-24 01:50:55
【问题描述】:

那么有什么想法为什么会发生这种情况?

localhost:0>scan 0 MATCH 20180223:c5*
 1)  "6553600"
 2)  
localhost:0>scan 6553600 MATCH 20180223:c5*
 1)  "655360"
 2)    1)   "20180223:c5192875:o4998561"
  2)   "20180223:c1354879:o1160565"
  3)   "20180223:c1008709:o814395"
  4)   "20180223:c4485666:o4291352"
  5)   "20180223:c4560776:o4366462"
  6)   "20180223:c1646865:o1452551"
  7)   "20180223:c3515588:o3321274"
  8)   "20180223:c938489:o744175"
  9)   "20180223:c4895806:o4701492"
  10)   "20180223:c1767235:o1572921"

localhost:0>

查看https://redis.io/commands/scan 看起来这个扫描命令是正确的,所以我不明白发生了什么。

有什么想法吗?

【问题讨论】:

  • 这可能是一个错误,你能用下面的脚本重现它吗?另外,那是什么Redis版本?数据集的大小是多少(INFO 或 DBSIZE)?
  • 您好,我的数据库有 4,000,000 个密钥,我使用的是 Windows 服务器,版本 3.2.100,我从 github.com/MicrosoftArchive/redis/releases 获得的,也许这确实是一个错误。我无法使用相同的数据在 Amazon ElasticCache 中重现这一点。
  • 啊哈!我不知道那个版本是否与 Redis 有任何关系... :)
  • redis.io/download Redis 确实链接到他们,但显然是一个独立的团队维护它。很高兴知道它有重要的错误。感谢您的帮助。
  • 知道了,最简单的解决方法 - 在 *nix 上使用 Redis ;) (github.com/antirez/redis-io/pull/143)

标签: redis


【解决方案1】:

这不应该发生,我无法使用相同的密钥和debug populate 10000 在本地(不稳定的分支)重现它。

我正在使用下面的 Lua 脚本进行测试:

$ cat /tmp/lua
local cursor = 0
local rep = {}

repeat
  local r = redis.call('scan', cursor, 'match', '20180223:c5*')
  cursor = tonumber(r[1])
  for _, v in ipairs(r[2]) do
    table.insert(rep, v)
  end
until cursor == 0

return rep
$ redis-cli --eval /tmp/lua
1) "20180223:c5192875:o4998561"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多