我正在使用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 操作,因此如果已删除的密钥包含 非常大的值,即使重命名本身是 通常是恒定时间操作。