[Redis入门-03] Redis事务处理
事务
基本
Redis事务的本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按顺序执行。
一次性,顺序性,排他性,执行一些列的命令。
Redis事务没有隔离级别的概念
所有命令在事务中,并没有被直接执行,只有发起执行命令的时候才会执行 Exec
Redis单条命令是保证原子性的,但是事务不保证原子性。
Redis的事务:
-
开启事务( multi )
-
命令入队( )
-
执行事务( exec )
正常执行事务:
127.0.0.1:6379> MULTI #开启事务 OK # 命令入队 127.0.0.1:6379> set name 1 QUEUED 127.0.0.1:6379> set name 2 QUEUED 127.0.0.1:6379> EXEC #执行事务 1) OK 2) OK 127.0.0.1:6379>
-
放弃事务(discard)
事务中有命令有错,事务中所有命令都不会执行。
运行时异常,如果事务队列存在语法性错误,那么执行时候,其他命令可以正常执行,错误命令抛出异常。
例:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 "bob"
QUEUED
127.0.0.1:6379> INCR k1 # 会执行失败
QUEUED
127.0.0.1:6379> ping
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (error) ERR value is not an integer or out of range #一条报错了,其他都执行了
3) PONG
4) OK
127.0.0.1:6379>
乐观锁(监控watch)
悲观锁:
-
悲观认为什么时候都会出现问题,无论做什么都加锁
乐观锁:
-
乐观认为什么时候都不会出现问题,所以不会上锁,更新数据时区判断一下,在此期间是否有人修改过这个数据
-
(mysql可用一个字段 version)获取 version 更新时比较version
Redis监视测试:
1.watch 于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
语法:watch key [key ...]
2.unwatch 取消watch命令对key的监视
Redis实现乐观锁的操作:

浙公网安备 33010602011771号