当有大量数据要发送时,如何在 Redis 中实现事务?



我正在使用pipelining来确保我的两个命令在事务中执行。

我的代码是:

with redis.pipeline() as p:
   p.delete(key)
   p.sadd(key, *many_ids)
   p.execute()

如您所见,我正在尝试用原子方式用新集合替换集合。但这会导致many_ids变大(超过100万(时Error 32 while writing to socket. Broken pipe.

我认为您遇到的麻烦可能是扩展了所有论点。还有另一种方式可以进行此交易;批量构建新集。,然后使用重命名操作

将密钥重命名为新密钥。当键不存在时,它会返回错误。如果 newkey 已经存在,它被覆盖,发生这种情况时重命名 执行隐式 DEL 操作,因此如果已删除的密钥包含 非常大的值,即使重命名本身是 通常是恒定时间操作。

最新更新