新手做网站怎么上传系统,建设一个网站需要哪些软硬件条件,智能小程序开发工具下载,河南工程建设信息网一体化平台13. redis事务操作
13.1事务简介
原子性(Atomicity) 一致性(Consistency) 隔离性(isolation) 持久性(durabiliby) ACID
13.2 Redis事务
提供了multi、exec命令来完成
第一步#xff0c;客户端使用multi命令显式地开启事务第二步#xff0c;客户端把事务中要执行的指令发…13. redis事务操作
13.1事务简介
原子性(Atomicity) 一致性(Consistency) 隔离性(isolation) 持久性(durabiliby) ACID
13.2 Redis事务
提供了multi、exec命令来完成
第一步客户端使用multi命令显式地开启事务第二步客户端把事务中要执行的指令发送给服务器端例如set 、get 、lpush这些指令不会立即执行进入一个队列中第三步客户端向服务器发送一个命令 exec来完成事务提交。当服务器端收到这个指令后实际去执行上一步中的命令队列.multi
set k1 v1
set k2 v2
set k3 v3
get k1
exec
multi
set k4 v4
set k5 v5
discard //取消13.3 Redis的事务处理机制
13.3.1 原子性
第一种情况
在执行exec指令前客户端发送操作命令有误,redis会报错并记录这个错误。此时还可以继续发送命令操作在执行exec命令之后redis拒绝执行所有提交的指令返回事务失败的结果。保证了原子性multi
set k1 v1
get k1 v1
set k2 v2
exec
整个队列失败第二种情况
向服务器发送指令其中有指令和操作的数据类型不匹配放入队列时并没有报错。使用lpop指令操作失败但get指令成功了。不能保证原子性multi
lpop k1 //失败
get k1 //成功
exec第三种情况
在执行事务的exec指令时redis实例发生了故障,导致事务执行失败如果redis开启了aof日志可能会有一部分指令被记录到AOF日志中需要使用redis-check-aof 去检查aof文件将未完成事务操作从aof清除从而保证原子性
13.3.2 一致性
第一种情况指令进入队列时就报错整个事务全部被放弃执行可以保证数据的一致性。第二种情况进入队列时没有报错实际执行时报错有错误的指令不去执行正确的指令可以正常执行可以保证数据的一致性第三种情况exec指令时redis实例发生故障根据RDB和AOF情况来做判断 如果没有开启rdb和aof数据在重启后没有一致的如果使用了rdb方式rdb不会在事务执行的时候去保存数据数据库也是一致的使用aof日志如果事务队列操作记录没有进入aof可以保证一致性。如果已加入了一部分使用redis-check-aof清除事务中已完成的操作保证事务的一致性
13.3.3 隔离性
提交exec指令去执行事务分成exec之前和exec之后两种情况 并发操作在exec指令前要实现隔离性的保证 需要使用watch机制否则不能保证隔离性 在事务执行前相当于有一个监控器在监控key是否已经被修改过了如果已修改则放弃事务执行避免了事务的隔离性被破坏。如果客户再次执行此时没有其他客户端去修改数据则执行成功。 悲观锁synchronized 乐观锁Atomic原子操作
使用unwatch取消watch命令对所有key的监控。
13.3.4 持久性
redis内存数据库取决于持久化配置模式 不开启rdb和aof只当作缓存使用是不能保证持久性 使用rdb如果在一个事务执行后下一次的rdb快照还未执行前redis实例发生故障了不能保证持久性 使用aof 配置选项 everysec、always、no也不能保证持久性 不管redis采用什么配置模式都不能保证事务的持久性