redis - 如果 redis 是单线程的,为什么我们需要 redis 中的 eval 命令?
问题描述
在 REDIS 中执行命令的一种方法是通过 EVAL 脚本。
Redis 使用相同的 Lua 解释器来运行所有命令。Redis 还保证以原子方式执行脚本:在执行脚本时不会执行其他脚本或 Redis 命令。
既然 redis 是单线程的,为什么我们需要 EVAL 来提供原子性呢?我希望这是由一个正在运行的线程暗示的。
我错过了什么吗?抱歉,如果我的问题很简单,我对 redis 很陌生
解决方案
Redis 中的每个(数据路径)命令确实是原子的。EVAL
允许您使用可以包含许多 Redis 命令的脚本编写“原子”命令,更不用说控制结构和一些有助于实现服务器端逻辑的其他实用程序。为了实现多个命令的类似“原子性”,您还可以顺便使用MULTI/EXEC
块(即事务)。
如果没有EVAL
orMULTI/EXEC
块,您的命令将一个接一个地运行,但其他客户端的命令可能会在它们之间交错。使用脚本或事务可以消除这种情况。
推荐阅读
- asp.net-core - 封闭的泛型类型注册 - Autofac - 无法解析构造函数的参数 x
- ruby-on-rails - Ruby on Rails - 访问当前用户的嵌套属性
- corda - 如何在 Corda 的 Initiator 节点中获取 FlowSession?
- firebase - Firestore:更新对象中的字段会删除先前的字段
- ios - Swift - UISearchBar:EXC_BREAKPOINT(代码=1,子代码=0x10297eabc)
- android - 如何在 Windows 上使用 python 构建 android 应用程序
- git - 使用 remote.repository.push 解析 git push origin
- excel - 排序,将值从表复制到另一个表并计算新值
- python - 如何使用 Python 将 NULL 值插入 PostgreSQL 数据库?
- vba - 将 Word 文档的内容插入电子邮件并使用 VBA 包含默认签名