根据特定值从Redis哈希中删除多个项目

时间:2011-11-23 10:07:05

标签: java spring redis jedis

根据项目的值是否包含特定子字符串,从哈希中删除一堆项目的最有效方法是什么?据我所知,在一个简单的块中没有真正的方法可以做到这一点。我必须在Java列表中逐字地获取该哈希的所有值,然后遍历此列表直到找到我需要的内容,然后从哈希中删除其密钥,并重复相同的过程。

我尝试的另一种方法是在单独的列表中对哈希项进行id引用,以便稍后使用单个调用,我可以获取应该删除的项的id列表。这有点好,但是,我使用的redis实现(Jedis)不支持删除多个哈希键,所以我再次被双手绑住。

Redis不支持引用完整性,对吧?这意味着,确定,存储在Redis列表中的密钥是对散列中项目的引用,因此如果我删除该列表,则散列中的相应项目将被删除。在Redis中没有类似的东西,对吗?

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

2 个答案:

答案 0 :(得分: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之间)以原子方式发出,我认为这就是你想要的。

答案 1 :(得分:0)

删除Redis列表中的ID不会影响Redis哈希字段。为了加快速度,请考虑pipelining。杰迪斯支持......