Jedis 过滤 hmset 中的值
Jedis filtering values in hmset
我在 redis 中有一些具有这个键结构的值
key:1:abc -> votes -> 0
-> name -> John
key:1:xyz -> votes -> 0
-> name -> Mary
key:1:def -> votes -> 1
-> name -> Larry
key:2:ijk -> votes -> 0
-> name -> apple
这就是我的钥匙space 的样子。我正在使用 hmset 将内容存储在 redis 中。 "key:1" 是用于标识特定 space 中不同用户的占位符,"key:1" 之后的部分是 "key:1" 中每条记录的唯一区分符。我想写一些代码来过滤掉来自redis的数据,以获得所有投票数设置为0的记录。所以jedis代码的输出应该是这样的
key:1:abc -> votes -> 0
-> name -> John
key:1:xyz -> votes -> 0
-> name -> Mary
Larry 被过滤掉了。我正在研究 hmscan 以解决此问题,但不确定该命令的外观。关于我可以做些什么来获得该输出的任何线索?另外你认为这次得到的时间复杂度是多少?
有几个解决方案,但第一个想到的是使用辅助结构。
每次将一个项目添加到 HASH 中时,也会将此人的姓名添加到一个 SET 中:
> SADD zerocount "Larry"
(integer) 1
> SADD zerocount "Mary"
(integer) 1
每当您想要计数为零的姓名列表时,您可以执行 SSCAN(给您分页):
> sscan zerocount 0
1) "0"
2) 1) "Mary"
2) "Larry"
例如,在增加 Larry 的值时,您将从集合中删除该值:
> srem zerocount "Larry"
1
对于每个添加的成员,SADD
是 O(N)
,在本例中为 O(1)
。 SSCAN
是每次调用的 O(1)
,而 SREM
是 O(1)
对于我们的场景,一般来说 O(N)
其中 N
是成员的数量被移除。
我在 redis 中有一些具有这个键结构的值
key:1:abc -> votes -> 0
-> name -> John
key:1:xyz -> votes -> 0
-> name -> Mary
key:1:def -> votes -> 1
-> name -> Larry
key:2:ijk -> votes -> 0
-> name -> apple
这就是我的钥匙space 的样子。我正在使用 hmset 将内容存储在 redis 中。 "key:1" 是用于标识特定 space 中不同用户的占位符,"key:1" 之后的部分是 "key:1" 中每条记录的唯一区分符。我想写一些代码来过滤掉来自redis的数据,以获得所有投票数设置为0的记录。所以jedis代码的输出应该是这样的
key:1:abc -> votes -> 0
-> name -> John
key:1:xyz -> votes -> 0
-> name -> Mary
Larry 被过滤掉了。我正在研究 hmscan 以解决此问题,但不确定该命令的外观。关于我可以做些什么来获得该输出的任何线索?另外你认为这次得到的时间复杂度是多少?
有几个解决方案,但第一个想到的是使用辅助结构。
每次将一个项目添加到 HASH 中时,也会将此人的姓名添加到一个 SET 中:
> SADD zerocount "Larry"
(integer) 1
> SADD zerocount "Mary"
(integer) 1
每当您想要计数为零的姓名列表时,您可以执行 SSCAN(给您分页):
> sscan zerocount 0
1) "0"
2) 1) "Mary"
2) "Larry"
例如,在增加 Larry 的值时,您将从集合中删除该值:
> srem zerocount "Larry"
1
对于每个添加的成员,SADD
是 O(N)
,在本例中为 O(1)
。 SSCAN
是每次调用的 O(1)
,而 SREM
是 O(1)
对于我们的场景,一般来说 O(N)
其中 N
是成员的数量被移除。