首页 > 解决方案 > 为什么redis返回更多的值而不是计数?

问题描述

我正在使用 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?

标签: ruby-on-railsredisredis-cli

解决方案


记录在案的含义COUNT是,它是关于在调用上要做多少工作的提示HSCAN,它不是要返回的元素的严格数量。

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

当迭代键空间,或者一个足够大的可以用哈希表表示的 Set、Hash 或 Sorted Set 时,假设没有使用 MATCH 选项,服务器通常会返回 count 或比 count 元素多一点的调用


推荐阅读