redis事务

redis事务的一些概念:

  • 基本概念:redis事务就是一致性,顺序性,排他性地执行一个队列中的一系列命令,
  • 这种一次性执行多个命令等待所有回复的做法叫做“流水线”,可以减少客户端与服务端的通信次数,提高效率,流水线可以分为事务性和非事务性,用pipeline实现一次执行多个不同命令
  • redis事务没有隔离级别:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行
  • redis事务不保证原子性,因为一个事务中某条命令出错,其他命令仍然执行
  • redis事务执行步骤:开始事务,命令入队,执行事务
  • redis不支持回滚:只有当发生语法错误,Redis命令才会执行失败, 但比如对keys赋予了一个类型错误的数据,这些在开发过程中就可以解决。几乎不会出现在生产环境

redis事务相关命令:

  • watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
  • multi : 开启事务
  • exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 )
  • discard : 是在multi执行之后,exec之前,也就是命令入队之后,放弃事务块中的所有命令,对连接重置
  • unwatch : 取消watch对所有key的监控,是在watch之后multi执行之前,事务命令执行之前对连接进行重置

redis事务语法:

redis 127.0.0.1:6379> WATCH xxx(可选)
OK
在事务执行期间,如果watch监控的值发生了改变,执行事务失败
redis 127.0.0.1:6379> UNWATCH(在WATCH和MULTI之间执行,对连接重置)
OK
redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> XXX命令
QUEUED
中间的XXX命令如果是非语法性错误,其他语句会正常执行,如果是语法性错误,不会正常执行
redis 127.0.0.1:6379> XXX命令 
QUEUED
redis 127.0.0.1:6379> DISCARD(在MULTI和EXEC之间执行,对连接重置)
OK

redis 127.0.0.1:6379> EXEC

  

 

 

  

原文地址:https://www.cnblogs.com/ycg-blog/p/12680496.html