MULTI命令
跟其他的事务一样,redis事务可以保证同一个事务内的命令同时都执行或者都不执行【保证事务的原子性】。同时redis事务可以保证事务内的执行操作是连续的,中间不会插入执行其他命令(即,如果客户端A向redis服务发送包含命令1、命令2、命令3的事务,当A发送EXEC命令后,redis服务执行命令1,然后此时若客户端B向redis服务发送命令4,命令4不会插入到命令1、2、3间执行,命令1、2、3是依次连续执行的)。但是Redis事务不保证一致性,因此Redis事务的回滚操作需要客户端自己去是实现处理。
redis事务使用方式:
redis> MULTI //开始事务
redis> SADD setone 100 //事务内命令
redis> SADD settwo 200 //事务内命令
redis> EXEC //执行事务
redis会维护一个事务队列,将MULTI后的所有命令到放到事务队列中,当redis接收到EXEC命令后,会依次执行事务队列。
但是值得注意的是,不像其他关系数据库的事务,redis事务并没有回滚(rollback)功能【不保证一致性】,事务内命令出错后,需要客户端自己实现回滚操作,将数据库回复到事务执行前的状态。
若事务中有命令出错,redis会继续执行其他有效的命令【redis版本为3.0.6】,
如下示例:
[ojh@localhost redisTest]$ redis-server -v
Redis server v=3.0.6 sha=00000000:0 malloc=libc bits=64 build=df1dc433a1cb5ac8
//事务一
127.0.0.1: