Redis的事务transactions与管道pipeline
1.Redis的事务仅仅是保证事务里的操作会被连续独占的执行,Redis的命令执行是单线程,
2.Redis不保证事务的所有指令可以同时成功或者同时失败,只可以决定是否开始执行全部指令的能力,因此也没有回滚
3.Redis可以保证一个事物内的命令会依次执行,不会被其他指令插入
MULTI #事务开始的标志 DISCARD #取消事务,放弃执行事务的所有命令 EXEC #执行所有事务块内的命令 WATCH #监视key 如果事务在执行前这个key被改动会打断事物 UNWATCH #取消watch对所有key的监视
#正常执行事务 MULTI EXEC
#放弃执行事务
MULTI
DISCARD
一致:在执行事务的时候如果有一个命令语法出错,Redis就会返回错误,所有命令都不执行
非一致性:在执行事务的时候如果语法没有出错,但是语义出错,那么就会不执行错误语句,正确语句照常执行
比如:set k1 123@qq.com
incr k1
Redis支持乐观锁,关键字wacth
第一个客户端 wacth v1 multi ----------- 第二个客户端 set v1 10 ----------- 第一个客户端 set v1 20 exec
上面这个例子中的事务会保持一致性,在事务中其他指令也不会发生
注意:在提交exec的时候之前加的监控锁就都被取消了,当客户端失去链接的时候所有东西的监控都会被取消
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
管道可以一次性发送多条命令给客户端,服务端依次处理完毕后,将一条响应结果依次返回,减少了RTT,实现原理也是队列,保证了数据的顺序性
是批处理的优化(mget mset)但是mset是string,管道可以跨数据类型
cat test.txt | redis-cli -a 123456 --pipe
管道与原生命令的对比:
①原生批量命令是原子性的,管道是非原子性
②原生批量命令一次只能执行一种命令,管道支持处理批量不同命令
③原生批量命令是服务端实现,管道命令是服务端和客户端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构