gpt4 book ai didi

transactions - 在 Redis 中,当存在没有关联的 EXEC 或 DISCARD 的 MULTI 时会发生什么?

转载 作者:IT王子 更新时间:2023-10-29 06:10:19 25 4
gpt4 key购买 nike

我有一系列在 Redis 集之间移动元素的脚本。有时这些操作需要是原子的。有时一个脚本会失败,但其他脚本会继续工作。

我很好奇如果在一个脚本中我运行 MULTI 并启动但随后脚本以某种方式失败并且我从不调用 EXEC 或 DISCARD 会发生什么 - 我知道我的数据完整性很好因为事务永远不会发生,但是由于命令在某处排队并且从未执行 我担心如果这种情况发生得太频繁(不应该,但谁知道呢?)我需要清理队列吗?

最佳答案

取决于“脚本失败”的确切含义

如果与 redis 服务器的连接丢失,则查询缓冲区将被释放。

如果与redis服务器的连接仍然活跃,而你的代码的其他部分根本没有使用它,那么查询缓冲区将继续占用服务器上的内存。默认情况下,空闲客户端连接不会终止。如果您在 redis.conf 中指定了 timeout,查询缓冲区最终将被回收。

如果与 redis 服务器的连接仍然有效,并且脚本中的另一个模块/函数/ block 重用了该连接,事情就会变得更有趣。它们执行的任何命令都会在服务器上排队,因为它们是前面多 block 的一部分。如果此模块启动另一个 multi,redis 服务器将响应“(错误)ERR MULTI 调用无法嵌套”,但查询缓冲区不会被清除。您的应用程序的行为方式在很大程度上取决于您使用的 Redis 驱动程序。

关于transactions - 在 Redis 中,当存在没有关联的 EXEC 或 DISCARD 的 MULTI 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com