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

管道与原生命令的对比:

  ①原生批量命令是原子性的,管道是非原子性

  ②原生批量命令一次只能执行一种命令,管道支持处理批量不同命令

  ③原生批量命令是服务端实现,管道命令是服务端和客户端

posted @   天启A  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示