我是新来的。例如,如果我有以下模式:
(顺便说一句,我不知道如何在redis中表达变量。我就用这个
<id:product>
作为主键值。在生产中,我将使用golang客户机来完成这项工作)
INCR id:product
SET product:<id:product> value
SADD color:red <id:product>
要查询红色产品,我可以执行以下操作:
SMEMBERS color:red
但问题是我只想在第一页显示其中的10个,然后在第二页显示下10个,以此类推。如何通过指定offset和limit参数让redis只返回其中的一部分?
redis专家通常会为这种情况做些什么?即使我只想要10个身份证,也要把所有的身份证都还给我?效率高吗?如果集合中有数百万个值,但我只想要10个呢?
谢谢。
顺便说一句,我用
而不是
和
SINTER
其他查询的作业。
SADD type:foo <id:product>
SINTER color:red type:foo
然后我又会有分页问题。因为我只想一次找到10个交叉点。(例如:如果交集返回数百万个键,但实际上我一次只需要其中10个用于分页)。
编辑2:
我应该改用排序集吗?我不确定这是否是专家的选择。比如:
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
-
我不知道是否有人建议采用上述方法。
-
out
排序集?
-
对score和member使用相同的值有意义吗?