【问题标题】:Deleting multiple items from a Redis hash, based on a certain value根据某个值从 Redis 哈希中删除多个项目
【发布时间】:2012-01-04 15:15:06
【问题描述】:

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

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

Redis 不支持引用完整性,对吧?这意味着,好的,存储在 Redis 列表中的键是对哈希中项目的引用,所以如果我删除列表,哈希中的相应项目将被删除。 Redis 中没有类似的东西,对吧?

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

【问题讨论】:

    标签: java spring redis jedis


    【解决方案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 之间)是原子发出的,我想这就是你想要的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。我认为这也是要走的路。
      猜你喜欢
      • 2015-08-20
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多