Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 如何得到SMEMBERS结果的子集?或者我应该使用具有相同值的SortedSet(分数和;成员?_Redis - Fatal编程技术网

Redis 如何得到SMEMBERS结果的子集?或者我应该使用具有相同值的SortedSet(分数和;成员?

Redis 如何得到SMEMBERS结果的子集?或者我应该使用具有相同值的SortedSet(分数和;成员?,redis,Redis,我是redis的新手。例如,如果我有以下模式: (顺便说一句,我不知道如何在redis中表达变量。我将只使用作为主键值。在生产中,我将使用golang client来完成此工作) 但问题是我只想在第一页显示其中10个,然后在第二页显示下10个,依此类推。如何通过指定offset和limit参数让redis只返回其中的一部分 redis专家通常如何处理这种情况?返回所有ID,即使我只需要10个?效率高吗?如果集合中有数百万个值,但我只想要10个呢 非常感谢 Edited1:顺便说一句,我使用集合而

我是redis的新手。例如,如果我有以下模式:

(顺便说一句,我不知道如何在redis中表达变量。我将只使用
作为主键值。在生产中,我将使用golang client来完成此工作)

但问题是我只想在第一页显示其中10个,然后在第二页显示下10个,依此类推。如何通过指定offset和limit参数让redis只返回其中的一部分

redis专家通常如何处理这种情况?返回所有ID,即使我只需要10个?效率高吗?如果集合中有数百万个值,但我只想要10个呢

非常感谢

Edited1:顺便说一句,我使用集合而不是列表排序集合,因为我需要为其他查询执行
烧结
作业

例如:

SADD type:foo <id:product>

SINTER color:red type:foo
SADD类型:foo
烧结矿颜色:红色类型:foo
然后我会再次出现分页问题。因为我实际上只想一次找到10个十字路口。(例如:如果交叉点返回数百万个键,但实际上我一次只需要其中10个用于分页)

Edited2:

我应该使用排序集吗?我不确定这是否是专家的选择。比如:

ZADD color:red <id:product> <id:product>
ZADD type:foo <id:product> <id:product>

ZRANGE color:red 0 9        // for the first page of red color products

ZINTERSTORE out 2 color:red type:foo AGGREGATE MIN
ZRANGE out 0 9        // for the first page of red color and type foo products
ZADD颜色:红色
ZADD类型:foo
ZRANGE颜色:红色0 9//用于红色产品的第一页
ZINTERSTORE out 2颜色:红色类型:foo最小骨料
ZRANGE out 0 9//用于红色和foo产品的第一页
  • 我不知道是否建议采用上述方法
  • 如果多个客户端正在创建相同的
    out
    排序集,会发生什么情况
  • 对分数和成员使用相同的值是否有意义
  • 使用排序集是在Redis中进行分页的标准方法

  • 上面说:“如果
    目的地
    已经存在,它将被覆盖。”

    因此,您不应该使用“out”作为目标密钥名。您应该改为使用唯一或足够随机的密钥名,然后在完成后将其删除

  • 我不知道你说的“有意义”是什么意思。这是一个很好的选择,如果这是你想要他们的顺序


  • 非常感谢您的详细解释。(1)
    是一个数字,因为我把这个
    INCR id:product
    放在了问题中。所以我认为使用它很好。(2) 再问一个关于更换的问题。我不知道如何在redis中生成唯一的UUID,我可以简单地使用
    INCR id:inter
    ,然后使用
    ZINTERSTORE tmp:redfoo:2 color:red type:foo AGGREGATE MIN
    ?我想这应该没问题。正确的?非常感谢你。
    SADD type:foo <id:product>
    
    SINTER color:red type:foo
    
    ZADD color:red <id:product> <id:product>
    ZADD type:foo <id:product> <id:product>
    
    ZRANGE color:red 0 9        // for the first page of red color products
    
    ZINTERSTORE out 2 color:red type:foo AGGREGATE MIN
    ZRANGE out 0 9        // for the first page of red color and type foo products