gpt4 book ai didi

redis - REDIS 中的 SCAN/HSCAN 命令是否有任何推荐的 COUNT 值?

转载 作者:行者123 更新时间:2023-12-03 06:42:42 24 4
gpt4 key购买 nike

我已经理解了 REDIS SCAN 中 COUNT 的含义。但是, REDIS COUNT 的理想值是多少?

最佳答案

默认值为 10 .这意味着该命令将带回 或多或少 10 个键 , 如果键在散列槽中稀疏填充,或者被 MATCH 过滤掉,则可能会更少图案。如果某些键共享一个哈希槽,可能会更多。无论如何,执行的工作与 COUNT 成正比。范围。

Redis 是单线程的。原因之一SCAN引入的目的是允许通过一次走几步,在不长时间阻塞服务器的情况下遍历所有 key 。

这正是决定什么是好的数字的标准。您愿意通过运行 SCAN 来阻塞 Redis 服务器多长时间命令。越高COUNT ,块越长。

让我们使用 Lua script感受一下 COUNT影响。在您的环境中使用它以根据您的服务器资源获取结果。

Lua 脚本:

local t0 = redis.call('TIME')
local res = redis.call('SCAN', ARGV[1], 'COUNT', ARGV[2])
local t1 = redis.call('TIME')
local micros = (t1[1]-t0[1])*1000000 + t1[2]-t0[2]
table.insert(res,'Time taken: '..micros..' microseconds')
table.insert(res,'T0: '..t0[1]..string.format('%06d', t0[2]))
table.insert(res,'T1: '..t1[1]..string.format('%06d', t1[2]))
return res

这里我们使用Redis TIME command .该命令返回:
  • Unix 时间(以秒为单位)
  • 微秒

  • 在我的机器上运行了一些,有 100 万个 key :
    COUNT    TIME IN MICROSECONDS
    10 37
    100 257
    1000 1685
    10000 14438

    请注意,这些时间不包括用于从套接字读取以及缓冲和发送响应的时间。实际时间会更大。一次花费的时间是在 Redis 之外,包括在网络上传播的时间不是您的 Redis 服务器被阻塞的时间。

    这就是我调用 Lua 脚本和结果的方式:
    > EVAL "local t0 = redis.call('TIME') \n local res = redis.call('SCAN', ARGV[1], 'COUNT', ARGV[2]) \n local t1 = redis.call('TIME') \n local micros = (t1[1]-t0[1])*1000000 + t1[2]-t0[2] \n table.insert(res,'Time taken: '..micros..' microseconds') \n table.insert(res,'T0: '..t0[1]..string.format('%06d', t0[2])) \n table.insert(res,'T1: '..t1[1]..string.format('%06d', t1[2])) \n return res" 0 0 5
    1) "851968"
    2) 1) "key:560785"
    2) "key:114611"
    3) "key:970983"
    4) "key:626494"
    5) "key:23865"
    3) "Time taken: 36 microseconds"
    4) "T0: 1580816056349600"
    5) "T1: 1580816056349636"

    关于redis - REDIS 中的 SCAN/HSCAN 命令是否有任何推荐的 COUNT 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055548/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com