redis事务是基于队列实现的,乐观锁机制。不同于Mysql,mysql则是基于日志和锁来实现的。

redis事务的操作

redis事务是基于队列实现的,乐观锁机制。

开启事务后所有命令都会放在队列中。执行要么成功要么失败

multi

# 开启事务
127.0.0.1:6379>multi
127.0.0.1:6379>set a 1
127.0.0.1:6379>set a 2
# 执行
127.0.0.1:6379>exec
# 丢弃队列里的命令
127.0.0.1:6379>multi

watch操作

redis没有锁,如果要防止多个键值队并发访问出现问题,可以用watch来控制

# A 用户
127.0.0.1:6379>set a 1 
127.0.0.1:6379>watch a
127.0.0.1:6379>multi
127.0.0.1:6379>decr a    # 不提交

# B 用户
127.0.0.1:6379>watch a
127.0.0.1:6379>multi
127.0.0.1:6379>decr a
127.0.0.1:6379>exec

# A执行exec 则会返回nil
127.0.0.1:6379>exec
(nil)