[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实现乐观锁的操作:
 
posted @ 2021-02-20 22:51  OldCha  阅读(133)  评论(0)    收藏  举报