Redis-事务
简介
Redis事务可以一次执行多个命令。
-
批量操作在发送 EXEC 命令前被放入队列缓存。
-
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
-
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
事务从开始到执行会经历以下三个阶段:
-
开始事务
-
命令入队
-
执行事务
与MySQL的事务相比,Redis的事务是没有原子性的机制的,Redis中的事务可以理解为一个打包的批量执行脚本,但批量执行并发原子化的操作,中间某条指令失败不会导致前面已做指令回滚,也不会中止脚本的运行。
Multi(标记一个事务块的开始)
127.0.0.1:6379> multi OK 127.0.0.1:6379> set name ike QUEUED 127.0.0.1:6379> get name QUEUED 127.0.0.1:6379> exec 1) OK 2) "ike"
Exec(执行事务块内的命令)
127.0.0.1:6379> multi OK 127.0.0.1:6379> set name ike QUEUED 127.0.0.1:6379> get name QUEUED 127.0.0.1:6379> exec 1) OK 2) "ike"
Discard(取消事务,放弃执行事务块内的所有命令)
127.0.0.1:6379> multi OK 127.0.0.1:6379> set name luke QUEUED 127.0.0.1:6379> discard OK 127.0.0.1:6379> get name "ike"
Watch(监视一个或多个key,如果再事务执行之前key有被其它命令改动,那么事务将被打断)
127.0.0.1:6379> watch name // 监视name OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> set name andy // 修改name为 andy,并在另一个客户端修改name为ike QUEUED 127.0.0.1:6379> exec // 执行失败 (nil) 127.0.0.1:6379> get name "ike"
Unwatch(取消对所有key的监视)
127.0.0.1:6379> watch name OK 127.0.0.1:6379> unwatch OK