Redis支持事务的机制是通过多条命令打包执行来实现的。主要包括以下步骤:
- 客户端开始一个事务,Redis记录下事务的开始。
MULTI # 标记事务开始
- 客户端往事务中添加多个命令。
SET key1 value1
LPUSH list1 value2
...
- 客户端执行事务。
EXEC # 执行事务
4.Redis把事务中的所有命令放入队列执行。
- 执行结果返回给客户端。
+OK # 所有命令执行成功
-ERR ... # 有命令执行失败
- 事务支持回滚。
DISCARD # 回滚事务,不执行任何命令
- 事务的隔离性。
在事务执行期间,不会影响其他命令。
一个典型的例子:
MULTI
INCR mycounter # 事务1
INCR mycounter # 事务2
INCR mycounter # 事务3
EXEC
最后mycounter
增加的次数仍然只有1。
举个Java API的例子:
conn.multi(); // 开始事务
conn.set("key1", "value1");
conn.set("key2", "value2");
List<Object> result = conn.exec(); // 执行事务,返回结果
redis.clients.jedis.Transaction这个类也可以方便地实现Redis的事务。