我有一些触碰了几个按键的脚本。如果我的脚本运行时Elasticache决定重新分片怎么办?它会在移动基础键之前等待脚本完成吗?还是我应该假设情况并非如此,并在设计这种边缘情况时设计我的应用程序?
一个示例是一个脚本,该脚本一次增加2个键。我可能会收到“集群错误”,这意味着出了点问题,我不得不再次执行我的脚本(并且可能最终将一个键增加两次,而另一个键增加一次)
假设您正在谈论Lua脚本,只要您在参数中传递键(并且在脚本中未进行硬编码),您就应该很好。这将是全有或全无。如果您不使用Lua脚本-请考虑这样做
来自EVAL command:
执行前必须分析所有Redis命令以确定该命令将对哪些键进行操作。为了做到这一点对于EVAL,必须显式传递密钥。这在许多方面都很有用,但特别是要确保Redis Cluster可以将您的请求转发给适当的群集节点。
来自AWS ElastiCache - Best Practices: Online Cluster Resizing:
重新分片期间,我们建议以下内容:
避免使用昂贵的命令–避免运行任何计算和I / O密集操作,例如KEYS和SMEMBERS命令。我们建议使用此方法,因为这些操作会增加集群,并影响集群的性能。而是使用SCAN和SSCAN命令。
遵循Lua最佳实践–避免长时间运行Lua脚本,并且始终预先声明Lua脚本中使用的键。我们推荐这种方法确定Lua脚本未使用跨槽命令。确保Lua脚本中使用的键属于同一插槽。