以下是事务在 Java 中的使用,代码如下:
import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction; public class TransactionExample { public static void main(String[] args) { // 创建 Redis 连接 Jedis jedis = new Jedis("xxx.xxx.xxx.xxx", 6379); // 设置 Redis 密码 jedis.auth("xxx"); // 设置键值 jedis.set("k", "v"); // 开启监视 watch jedis.watch("k"); // 开始事务 Transaction tx = jedis.multi(); // 命令入列 tx.set("k", "v2"); // 执行事务 tx.exec(); System.out.println(jedis.get("k")); jedis.close(); } } 6.小结事务为多个命令提供一次性按顺序执行的机制,与 Redis 事务相关的命令有以下五个:
multi:开启事务
exec:执行事务
discard:丢弃事务
watch:为事务提供乐观锁实现
unwatch:取消监控(取消事务中的乐观锁)
正常情况下 Redis 事务分为三个阶段:开启事务、命令入列、执行事务。Redis 事务并不支持运行时错误的事务回滚,但在某些入列错误,如 set key 或者是 watch 监控项被修改时,提供整个事务回滚的功能。
7.思考题Redis 事务中如何解决并发修改的问题?Redis 支持事务回滚吗?使用 Redis 事务时会出现哪三种错误?这三种错误对事务有何影响?只有高手才能答对的问题,你能答上来几个?
8.参考&鸣谢https://redis.io/topics/transactions