Redis学习-4-1 Redis事务

1.Redis中的事务

Redis中的事务不等同于关系型数据库中的事务,其实就是一些命令,保证事务中的命令是正常执行的,没有回滚的概念。

1>multi:标记一个事务的开始,还未开始执行;

2>exec:执行事务块内的所有命令;

3>discard:取消事务中的所有命令执行;

2.Redis中执行的三种情况:

例:1实现正常事务的逻辑:

multi

sadd works john

sadd works rose

smembers works

exec

例:2exec执行之前,命令语法就是错误的,redis可检测到语法的问题

multi

set username lisi

get username

incr k1 k2

exec

此时get username 是nil

语法的有错误的话,整个事务可以放弃取消的

例:3 放入redis中的命令语法没错,执行的时候才会出错的,事务是正常执行的

lindex:是列表类型的命令,lindex string的变量,语法是没问题的,只要执行的时候发生错误

set username zs

multi

set username lisi 

get username

lindex k1 2

exec

get username 变更为lisi说明已经执行了

3.watch和unwatch机制

watch:使用watch监视一个或多个key,跟踪key的value修改情况,如果有key的value值在事务exec执行之前被修改了,整个事务取消,保证任意时刻只有一个事务执行

数据竞争的问题:多个用户同一时间修改同一数据的值,redis一秒钟执行8w数据,碰撞几率太小

unwatch:取消命令

watch机制对应的是关系型数据库中的乐观锁概念

例题:

redisA:

set str.lp 10

watch str.lp 

multi

set str.lp 30

此时redisB中get str.lp 是10

redisB中set str.lp 100 ==>OK

redisA中exec 返回的是nil 证明未执行这个命令

redisA中get str.lp是100 

这是因为redisA在exec执行事务之前,变量str.lp已经做变更,事务执行是取消的

4.Discard命令执行取消事务

set username zhangsan

multi

set username zhangsan01

set username zhangsan02

discard <放弃事务>

get username 就是zhangsan 因为放弃了事务的执行

 

posted on 2018-09-10 10:44  companion  阅读(84)  评论(0编辑  收藏  举报