Redis 事务
使用事务指令(multi),客户端将多个指令发送到Redis但是不执行,直到收到 exec 或者 discard 才 处理
指令
- multi: 事务开始
- exec: 执行事务
- discard: 取消事务
- watch: 监听key变化,可以用来实现乐观锁
ioredis
redis
.multi({ pipeline: true }) // 使用管道优化
.set("foo", 1)
.get("foo")
.exec()
Watch
需要在事务 multi 指令前就 调用 watch, 否则无效
import Redis from 'ioredis'; const redis = new Redis(); redis.watch("Foo").then(() => { return redis.set("Foo", 2); // 修改了Foo }).then(() => { return redis.multi().set("Foo", 1).get("Foo").exec().then(res => { console.log("Response", res); // 返回 `Response null` }).finally(() => { redis.disconnect(); }); });
ref: \ https://redis.io/docs/manual/transactions/