为什么redis返回更多值而不是count?

时间:2019-07-03 13:13:11

标签: ruby-on-rails redis redis-cli

我正在使用Ruby on Rails将密钥存储到Redis中。我的哈希下有超过20000个密钥。我尝试限制全部获得的10。但是redis返回11而不是10。为什么它返回11?

我的哈希

127.0.0.1:6379> HLEN myhash
(integer) 14148

在下面的示例中,我查询4条记录,但返回5条带有相应值的

127.0.0.1:6379> HSCAN my_hash 0 match * count 4
1) "896"
2)  1) "player 1"
    2) "{\"id\":\"13192\",\"name\":\"Ram\"}"
    3) "player 2"
    4) "{\"id\":\"5429\",\"name\":\"Gopal\"}"
    5) "player 3"
    6) "{\"id\":\"2614\",\"name\":\"Venu\"}"
    7) "player 4"
    8) "{\"id\":\"9645\",\"name\":\"Sam\"}"
    9) "player 5"
   10) "{\"id\":\"2358\",\"name\":\"Rohit\"}"

为什么这里要5点?

2 个答案:

答案 0 :(得分:2)

COUNT的{​​{3}}含义是它暗示着在HSCAN调用上需要做多少工作,并不是要返回的元素数量严格。

  

尽管SCAN不能保证每次迭代返回的元素数量,但可以使用COUNT选项根据经验调整SCAN的行为。基本上,用户使用COUNT来指定每次调用以从集合中检索元素时应完成的工作量。这只是实现的提示。

     

当迭代键空间或Set,Hash或Sorted Set足够大以由哈希表表示时,假设不使用MATCH选项, 服务器通常将返回计数或

答案 1 :(得分:2)

选中此answer

根据docu

迭代键空间或足够大以可由哈希表表示的Set,Hash或Sorted Set时,假设未使用MATCH选项,则服务器通常将返回 count或。每个调用中的元素计数要多一些。。请检查为什么SCAN可能一次返回所有元素的原因。