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

时间:2017-05-17 06:10:14

标签: python redis

我使用pipelining确保我的两个命令在交易中执行。

我的代码是:

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

正如你所看到的,我试图用原子方式替换一个新的集合。 但是当Error 32 while writing to socket. Broken pipe.变大(超过100万)时,这会导致many_ids

1 个答案:

答案 0 :(得分:1)

我认为你遇到的麻烦可能在于扩大你的所有论点。还有另一种方法可以进行这项交易;批量构建新集。然后使用RENAME操作

  

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