首页 > 解决方案 > 如果 redis 是单线程的,为什么我们需要 redis 中的 eval 命令?

问题描述

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

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

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

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

标签: redis

解决方案


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

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


推荐阅读