Jedis过滤hmset中的值

时间:2015-04-02 00:31:38

标签: java redis jedis

我在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

这就是我的键空间的样子。我正在使用hmset将这些东西存储在redis中。 "键:1"是一个占位符,用于标识特定空间中的不同用户以及"键之后的部分:1"是" key:1"中每个记录的唯一区别。我想编写一些代码来过滤掉redis中的数据,以便将所有投票数设置为0的记录。所以jedis代码的输出应该类似于

key:1:abc -> votes -> 0
          -> name  -> John 

key:1:xyz -> votes -> 0
          -> name  -> Mary 

拉里被过滤掉了。我正在研究hmscan解决这个问题,但我不确定该命令会是什么样子。关于我能做些什么来获得输出的任何线索?你认为这个时间的复杂程度是多少?

1 个答案:

答案 0 :(得分:1)

对此有几种解决方案,但首先想到的是使用辅助结构。

每次向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
对于添加的每个成员,

SADDO(N),在本例中为O(1)。对于每个调用,SSCANO(1),对于我们的方案,SREMO(1),一般为O(N),其中N是成员的数量被删除。