【问题标题】:How to run a single Lua script against multiple Redis values in parallel?如何针对多个 Redis 值并行运行单个 Lua 脚本?
【发布时间】:2017-12-28 15:03:46
【问题描述】:

在 Redis 中,我们有表示输入值的字符串。我们(希望)有一个动态生成的 Lua 脚本(在用户使用 GUI 定义之后),它根据输入字符串计算结果字符串。每组输入值彼此独立。所以这应该是微不足道的并行化,但是,EVAL 似乎会阻塞直到完成。

Redis 中有没有一种方法可以跨一堆值运行单个 Lua 脚本,而无需重写脚本本身来执行它?

【问题讨论】:

    标签: lua redis


    【解决方案1】:

    由于Redis 是作为单线程服务器实现的,因此无法从同一个客户端并行运行多个命令。 但是,您应该能够在多个客户端上运行多个命令(包括script 命令),并且 Redis 会在其 IO 循环中将它们交错。

    话虽如此,Redis 不仅速度超快,而且灵活; 请考虑以下选项之一:

    1. 自己编写 Redis 模块,添加命令,或者根据自己的喜好添加新命令。
    2. 考虑多分片环境。这将使每个 redis-server(或分片)能够独立运行,同时您可以将调用定向到正确的分片。这有点费力,如果您考虑此解决方案,请告诉我,我可以就此事进一步指导您。

    一切顺利!

    【讨论】:

    • 嗯,听起来我必须人为地分割我的行。像计算每行的 sha1,然后是模数 n,其中 n 是我的分片数,然后至少我以这种方式获得了一些负载共享......
    • 完全正确 - 更准确地说 - 条目的 key 上的一些散列函数(不要将条目的值视为散列的输入),否则, (key, value) 对在您更新值时可能需要迁移。
    • 此外,还有一些开箱即用的开源代理以及商业代理。
    • @Elior Malul 多个客户端可以在 redis 中运行并行脚本吗?例如,100 个客户端同时运行 100 个脚本。
    • @MuhammadFaizanFareed 开源 redis 是单线程的(免责声明 - 我离开后已经 5-6 年了),但当时确实如此 - 所以那里没有“真正的”并发。Oran Agra 是开源维护者,他肯定知道。如果你是 Redis Labs 的客户,那肯定是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2015-09-06
    • 2016-01-05
    相关资源
    最近更新 更多