我使用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
。
答案 0 :(得分:1)
我认为你遇到的麻烦可能在于扩大你的所有论点。还有另一种方法可以进行这项交易;批量构建新集。然后使用RENAME操作
将键重命名为newkey。当密钥不存在时,它返回错误。如果 newkey已经存在它被覆盖,当发生这种情况时RENAME 执行隐式DEL操作,因此如果删除的键包含一个 非常大的价值,即使RENAME本身也可能导致高延迟 通常是一个恒定的操作。