ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis的事务与乐观锁

2022-09-12 14:34:47  阅读:200  来源: 互联网

标签:事务 money watch redis 乐观 命令 执行


redis的事务与乐观锁

redis事务的本质是一组命令的集合,事务支持一次执行多条命令,一个事物中所有命令都会被序列化,在事务执行时,会按照之前的顺序串行执行队列中的命令,其他客户端提交的命令不会插入到事务的执行队列中去。

redis事务的本质

redis事务是一次性,顺序性,排他性的执行一个队列中的一系列命令

redis事务的特点

  1. redis事务没有隔离级别的概念

    所有命令在事务中,并没有直接执行,只有发起执行命令(exec)时才会执行
    
  2. redis事务不保证原子性

    redis的单条命令是原子性的,但事务不保证原子性,事务执行过程中有一条命令执行失败,其他命令仍会执行
    

redis事务的三个阶段

1.开始事务(multi)
2.命令入队(redis命令)
3.执行事务(exec)

正常执行事务后,会依次返回redis命令结果
如果在命令入队过程中想要取消事务,可以输入命令discard取消事务

redis事务的两种异常情况

编译型异常

此异常为执行命令有问题,当输入错误的命令后,事务中所有命令都不会被执行
如:get key1 key2 这种命令错误的命令

运行时异常

此异常为事务执行过程中类型错误的问题,此时事务中除语错误的命令外,其他命令的均能正常执行
如:set k1 value   incr k1  :这种给字符串自增1的命令

锁机制

悲观锁

认为什么时候都会出问题,无论做什么都会加锁

乐观锁

认为什么时候都不会有问题,不出上锁,只在更新数据时判断,在此期间是否有数据变动

watch实现乐观锁

watch(监控):用于监控key的value值--watch key

例如当有两个客户端同时操作同一个redis时
其中一个客户端通过watch的方式来对事务中要改变数组的key进行监控
watch money
multi
incrby money 200
exec
如果在执行事务时,监控money的值没有发生变化,则事务正常执行,watch失效
如果money的值发生变化,则事务会执行失败,如果想再次加乐观锁就需要解除监控,再监控最新的money值
unwatch
watchmoney
multi
incrby money 200
exec

标签:事务,money,watch,redis,乐观,命令,执行
来源: https://www.cnblogs.com/shenStudy/p/16686091.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有