根据项目的值是否包含特定子字符串,从哈希中删除一堆项目的最有效方法是什么?据我所知,在一个简单的块中没有真正的方法可以做到这一点。我必须在Java列表中逐字地获取该哈希的所有值,然后遍历此列表直到找到我需要的内容,然后从哈希中删除其密钥,并重复相同的过程。
我尝试的另一种方法是在单独的列表中对哈希项进行id引用,以便稍后使用单个调用,我可以获取应该删除的项的id列表。这有点好,但是,我使用的redis实现(Jedis)不支持删除多个哈希键,所以我再次被双手绑住。
Redis不支持引用完整性,对吧?这意味着,确定,存储在Redis列表中的密钥是对散列中项目的引用,因此如果我删除该列表,则散列中的相应项目将被删除。在Redis中没有类似的东西,对吗?
我将不得不经历这个循环并分别删除每个项目。我希望至少有一个像块一样的东西,我可以收集所有1000个命令,并在一个完整的调用中发送它们,而不是1000个单独的命令。
答案 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
使用管道将允许在流水线命令之间发出来自其他连接客户端的命令,因为它只保证客户端发出命令而不等待回复,而不保证原子性。
答案 1 :(得分:0)
删除Redis列表中的ID不会影响Redis哈希字段。为了加快速度,请考虑pipelining。杰迪斯支持......