【问题标题】:why we need the eval command in redis, if redis is single-threaded?如果 redis 是单线程的,为什么我们需要 redis 中的 eval 命令?
【发布时间】:2020-05-29 08:52:03
【问题描述】:

在 REDIS 中执行命令的一种方法是通过 EVAL 脚本。

Redis 使用相同的 Lua 解释器来运行所有命令。还 Redis 保证脚本以原子方式执行:没有其他的 脚本或 Redis 命令将在脚本运行时执行 执行。

既然 redis 是单线程的,为什么我们需要 EVAL 来提供原子性?我希望这是由一个正在运行的线程暗示的。

我错过了什么吗?抱歉,如果我的问题很简单,我对 redis 很陌生

【问题讨论】:

    标签: redis


    【解决方案1】:

    Redis 中的每个(数据路径)命令确实是原子的。 EVAL 允许您使用包含许多 Redis 命令的脚本编写“原子”命令,更不用说控制结构和其他一些有助于实现服务器端逻辑的实用程序。为了实现多个命令的类似“原子性”,您还可以顺便使用MULTI/EXEC 块(即transactions)。

    如果没有EVALMULTI/EXEC 块,您的命令将一个接一个地运行,但其他客户端的命令可能会在它们之间交错。使用脚本或事务可以消除这种情况。

    【讨论】:

      【解决方案2】:

      Redis 使用单个线程来执行来自许多不同客户端的命令。因此,如果您希望按顺序执行来自一个客户端的一组命令,则需要一种方法来指示 Redis 执行此操作。这就是EVAL 的用途。没有它,Redis 可以将来自其他客户端的命令与您的命令交错执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 2018-06-10
        • 2018-01-03
        • 2016-09-30
        • 1970-01-01
        • 1970-01-01
        • 2019-09-06
        相关资源
        最近更新 更多