Redis事务
-
Redis事务可以一次执行多个命令
- 多个命令可以在执行EXEC命令之前放入缓存队列
- 收到EXEC命令后会将缓存队列执行
- 在执行事务的过程中,新提交的并不能被插入到事务执行序列中
- DISCARD可以取消事务,放弃执行事务块内的所有命令
- Redis事务不是原子性的:因为单个Redis命令的执行是原子性的,但由于Redis没有在事务上增加任何维持原子性的机制,所以Redis事务不是原子性的
- Redis事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做执行的回滚,也不会造成后续的指令不做
-
举例:
127.0.0.1:6379> MULTI //代表后面的语句都会放入到缓存中,暂时不执行
OK
127.0.0.1:6379> SET account1 1
QUEUED //放入了缓存队列中
127.0.0.1:6379> SET account2 1
QUEUED
127.0.0.1:6379> GET account1
QUEUED
127.0.0.1:6379> EXEC //退出事务默认,开始执行缓存队列,当没有退出事务的时候,别的客户端来GET account1,也是获取不到的,会返回(nil),就是空的意思
1) OK
2) OK
3) "1"
Redis事务在node中的应用
const redis = require("redis");
let client = redis.createClient(6379,"127.0.0.1");
client.multi().hset("user2","name","yuhua").hset("user2","age",18).exec(redis.print);