品牌网站建设工作室,商务网站建设概念,做网站要icp备案吗,吴江建设网站Redis事务的概念#xff1a;
Redis事务就是将一系列命令包装成一个队列#xff0c;在执行时候按照添加的顺序依次执行#xff0c;中间不会被打断或者干扰#xff0c;在执行事务中#xff0c;其他客户端提交的命令不可以插入到执行事务的队列中#xff0c;简单来说Redis事…Redis事务的概念
Redis事务就是将一系列命令包装成一个队列在执行时候按照添加的顺序依次执行中间不会被打断或者干扰在执行事务中其他客户端提交的命令不可以插入到执行事务的队列中简单来说Redis事务就是一次性、顺序性、排他性的执行一些列命令。
Redis事务的特点
Redis事务不保证原子性Redis中单个命令是原子性的但是Redis事务不保证原子性且不会回滚当一组命令中有某个命令执行失败后后续的命令会继续执行。Redis事务单独的隔离操作事务中的所有命令都会序列化、按顺序执行在执行过程中不会被其他的客户端发送的命令插入。没有隔离级别的概念队列中的命令没有提交之前都不会实际被执行因为事务提交前任何指令都不会被实际执行事务开始执行后其他客户端的命令也无法插入。Redis事务中命令格式错误不会执行但是如果格式正确但是运行错误例如list进行incr操作最终正常的命令会正常执行发生错误的不执行这个时候就要处理数据一致性的问题了。 Redis事务的主要作用就是串联多个命令防止别的命令插队。
Redis事务常用命令
命令描述multi开启事务命令后续命令依次进入队列exec执行事务如果被监听的key没有被修改就执行事务否则回滚discard取消事务发生在mulit之后exec之前执行该命令后不能再继续执行exec命令了watch key1 [key2 …]用于监视一个或多个key如果在事务执行之前key被其他命令所改动那么事务将被打断unwatch key1 [key2 …]取消 WATCH 命令对所有 key 的监视
Redis事务的执行步骤
开启事务mulit执行此命令后开启Redis事务后续的所有指令都添加到事务中。命令入队将所有的命令加入队列。执行事务exec执行此命令后事务开始执行Redis依次开始执行队列中的命令其他命令不可插队或打断了。exec执行此命令后事务开始执行Redis依次开始执行队列中的命令其他命令不可插队或打断了。
图例
watch命令
watch命令是一个乐观锁他可以在执行事务之前监控Redis中任务数量的key并在执行exec的时候检查这些key是否被修改过如果修改过事务就会拒绝执行。用来判断事务执行是否安全在执行multi命令之前先执行watch key1 key2 …命令对目标key进行监视最后在执行exec命令事Redis会检查这些key否打开了REDIS_DIRTY_CAS标识如果打开则事务可以正常执行否则事务会拒绝执行。
unwatch的命令 取消watch命令监视的key如果再执行unwatch命令之前已经执行了exec或者discard命令那就无需执行unwatch命令了。
Redis事务的使用场景
用户命令打包批量操作的场景以此来减少Redis服务器的通讯次数。多个命令需要顺序操作的时候因为Redis事务中的命令是顺序执行的。
总体来说Redis事务在实际业务中使用较少且Redis事务不支持回滚需要谨慎使用。
如有不正确的地方请各位指出纠正。