IT评测·应用市场-qidao123.com技术社区

标题: Redis面试——事务 [打印本页]

作者: 怀念夏天    时间: 6 天前
标题: Redis面试——事务
一、Redis原子性是什么?

(1)单个命令的原子性

原子性是指一组操纵,要么全部实行成功,要么全部失败。Redis 中的单个命令是天然原子性的,由于 Redis 的命令实行采用单线程模子,同一时间只会实行一个命令,不会出现并发修改数据的情况
(2)Redis 多线程处理请求的流程

如果现在有多个客户端给 Redis 发送请求,Redis 从 6.0 版本开始引入多线程,多线程仅用于处理网络 I/O 操纵。多个 I/O 线程会并行地吸收并剖析这些请求,将其剖析成命令,每个命令会被标记所属的客户端。然后,I/O 线程将这些命令放入全局队列中。之后,Redis 的主线程(单线程)会从全局队列中依次取出命令并实行,保证了每个命令实行的原子性。当一个命令实行完毕,实行结果会被存放在对应的客户端结果缓冲区,I/O 线程再将结果从缓冲区取出并相应给客户端。需要注意的是,单个命令具有原子性,但多个命令默认情况下可能会被其他客户端的命令交织实行,若要保证多个命令的原子性,可以使用 Redis 的事务(MULTI、EXEC等命令)或 Lua 脚本
二、怎样保证多个操纵的原子性?

假设你要实现一个原子性的操纵:检查键 counter 是否存在,若存在就将其值加 1,若不存在则将其初始化为 1
(1)Lua脚本

(2)事务

三、Lua脚本 vs 事务

(1)传输与实行流程及效率对比

(2)错误处理机制

四、事务中的watch命令


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4