2011-11-23 95 views
1

根据项目的值是否包含特定的子字符串,从哈希中删除一堆项目的最有效方法是什么?据我所知,在一个简单的块中没有办法做到这一点。我必须从字面上抓取Java列表中的所有哈希值,然后迭代该列表直到找到需要的内容,然后从哈希中删除其密钥,并重复同样的过程。基于某个值从Redis哈希中删除多个项目

我尝试过的另一种方法是将一个id引用放置在单独的列表中,以便稍后通过一次调用就可以获取应该删除的项目的id列表。这有点好一些,但是,我仍然使用Redis实现(Jedis)不支持多个哈希键的删除,所以我仍然用双手捆绑在一起。

Redis不支持引用完整性,对不对?这意味着,好的,存储在Redis列表中的密钥是对散列中项目的引用,所以如果我删除列表,则散列中相应的项目将被删除。在Redis中没有这样的事,对吧?

我将不得不经过这个循环并单独删除每一个项目。我希望至少有一个像块的东西,在那里我可以收集所有1000个命令,并在一个完整的调用中发送它们,而不是1000个单独的命令。

回答

0

删除Redis列表中的ID不会影响Redis哈希字段。要加速考虑,请考虑pipelining。 Jedis支持...

+0

谢谢。我认为这也是一条路。 – user802232

1
I wish at least there was something like a block, 
where I could collect all 1000 commands, and send them in one entire call, 
rather than 1000 separate ones. 

这就是交易是:http://redis.io/topics/transactions

使用管道将让来自其他连接的客户端可能的命令流水线命令之间发出,因为它只能保证你的客户端问题命令而不等待回复,不保证原子性。

交易中的命令(即在MULTI/EXEC之间)是以原子方式发布的,我认为这是您想要的。