学习mysql数据库的时候,我们知道了事务的ACID特性,Redis也是支持事务的,不过和数据库的事务又有什么区别?在mysql数据库中,我们使用begin开启事务,提交是commit,回滚是rollback,然后Redis中的事务是怎么一回事?redis的事务其实可以看做是一组命令按照顺序,串行执行队列中的命令,其它客户端的命令不会写入到这个队列中。总的来说,redis事务就是一次性、顺序性、排他性的执行一个队列中的一组命令
MULTI 、 EXEC 、 DISCARD 和 WATCH、UNWATCH命令是redis实现事务需要的命令
127.0.0.1:0>multi
"OK"
127.0.0.1:0>incr testid
"QUEUED"
127.0.0.1:0>exec
1) "1"
127.0.0.1:0>multi
"OK"
127.0.0.1:0>incr testid
"QUEUED"
127.0.0.1:0>seta a
"ERR unknown command `seta`, with args beginning with: `a`, "
127.0.0.1:0>exec
"EXECABORT Transaction discarded because of previous errors."
127.0.0.1:0>set testid aa
"OK"
127.0.0.1:0>multi
"OK"
127.0.0.1:0>incr testid
"QUEUED"
127.0.0.1:0>exec
1) "ERR value is not an integer or out of range"
127.0.0.1:0>multi
"OK"
127.0.0.1:0>incr id
"QUEUED"
127.0.0.1:0>discard
"OK"
127.0.0.1:0>watch id
"OK"
127.0.0.1:0>multi
"OK"
127.0.0.1:0>set id 1
"QUEUED"
127.0.0.1:0>get id
"QUEUED"
另外一个客户端设置key的值
127.0.0.1:0>set id 2
"QUEUED"
客户端1再提交事务
127.0.0.1:0>exec
(nil)