redis入门常用的命令操作(总结 一)

一、使用方式

    (1) 正常执行

    (2) 放弃事务

    (3) 全体连坐

    (4) 冤头债主

 (5)watch监控

二、常见命令:

DISCARD:    取消事务,放弃执⾏事务块内所有的命令

 EXEC:           执⾏所有事务块内的命令

MULTI:           标记⼀个事务块的开始

扫描二维码关注公众号,回复: 5974500 查看本文章

UNWATCH:    取消WATCH命令对所有key的监视

WATCH  key  [key .....]:     监视⼀个或多个key.如果在事务执⾏之前这些key被其他命令所改动.那么事务将被打断

正常执⾏-例⼦:

1、 开始⼀个事务:MULTI

2、 添加三条数据:

      set k1 v1
      set k2 v2
      set k3 v3

3、提交事务 :EXEC

放弃事务-例⼦:
当我们在做⼀系统操作时,突然发现前⾯某⼀个指令有问题,不想把这些指令提交时可以通过 DISCARD 放
弃执⾏开启事务后的这些指令
1、 开始⼀个事务: MULTI
2、 修改⼀条数据:set  k1  123
3 、此时我们不想修改 k1的值了.我们可以取消事务的提交:DISCARD

全体连坐-例⼦:
当我们在进⾏⼀系统命令提交的时候,如果其中某⼀个命令出错没有成功执⾏.那么本批次的命令全部放弃.
1 开始⼀个事务: MULTI


2、 执⾏⼀些指令:
# 其中第四条指令是错误指令,⽆法执⾏.
set k1 v1
set k2 v2
set k3 v3
asdfasdf
set k4 v4
set k5 v5


3 、提交事务: EXEC


4 、结果:本次执⾏的指令⼀个也不会成功.原因因为第四条指令执⾏失败.导致全体连坐

 

冤头债主-例⼦:
1 开始⼀个事务:MULTI

2 执⾏⼀些指令:
INCR k1
set k4 v4
set k5 v5

显然,k1的 value 是 v1,所以他是不能够做加1运算的.但是这条指令没有问题.错的是在执⾏的时候会出错.
不像全体连错⾥⾯的命令压根就是错误的.


3 提交事务: EXEC

4 、结果 : 这⾥的结果我们看⻅.只有第⼀条执⾏失败了.其余两条都成功了.这的意思就是如果命令没有错.
因为数据问题导致的错误.那么谁错的就是谁的.不会造成连坐

 

watch监控
悲观锁,乐观锁,CAS(check and set)
悲观锁: 表锁,⼀⼈操作.多⼈排队,⾼并发性能差.
乐观锁:  当多⼈前后短时间内操作同⼀条数据时.给操作⾏数据⼀个version.某⼈修改的时候确定是否还
             是他最开始要修改的那个版本数据,如果不是.那么需要重新进⾏GET新数据并修改.
1、准备数据
花呗额度 1000块,吃饭使⽤10块.
花呗 : huabei
⽋款 : debt
set huabei 1000
set debt 0
2、 操作前开启监控
WATCH huabei
3 、开启事务
MULTI
4 、消费10块,额度减⼩10块.⽋款增加10块
DECRBY huabei 10
INCRBY debt 10
5、 提交事务 :exec

 

最后总结 :

修改数据前⼀定要进⾏数据监控.确保修改提交时与修改前是同⼀版本.
如果提交时发现版本不同,可以通过 UNWATCH取消监控,重新监控.
另:⼀但执⾏了 exec,那⾏之前监控锁都将被取消.
Watch指令类似于乐观锁.事务提交时.如果Key的值已被其他客户端改变.⽐如某个list已被别的客户端
push/pop过.整个事务队列都不会被执⾏.

事务三阶段:开启、队列、

猜你喜欢

转载自www.cnblogs.com/studygithub5208868/p/10751318.html