redis 事务 & 锁
参考:https://www.cnblogs.com/DeepInThought/p/10720132.html
Redis不保证原子性:
Redis中,单条命令是原子性执行的,但事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行
Redis事务相关命令:
watch key1 key2 ... : 监视一或多个key,如果在事务执行之前,被监视的key被其他命令改动,则事务被打断 ( 类似乐观锁 )
multi : 标记一个事务块的开始( queued )
exec : 执行所有事务块的命令 ( 一旦执行exec后,之前加的监控锁都会被取消掉 )
discard : 取消事务,放弃事务块中的所有命令
unwatch : 取消watch对所有key的监控
一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。
故当事务执行失败后,需重新执行WATCH命令对变量进行监控,并开启新的事务进行操作。
在Redis事务中会出现两类错误:
1.命令语法错误、参数错误等,命令没有进入事务的命令队列,直接就返回错误。
2.命令进入事务的命令队列,但在执行EXEC后出错,例如对错误的数据类型使用了不支持的操作
==================
Redis 的事务是不可嵌套的, 当客户端已经处于事务状态, 而客户端又再向服务器发送 MULTI 时, 服务器只是简单地向客户端发送一个错误, 然后继续等待其他命令的入队。 MULTI 命令的发送不会造成整个事务失败, 也不会修改事务队列中已有的数据。
WATCH 只能在客户端进入事务状态之前执行, 在事务状态下发送 WATCH 命令会引发一个错误, 但它不会造成整个事务失败, 也不会修改事务队列中已有的数据(和前面处理 MULTI 的情况一样)
————————————————
版权声明:本文为CSDN博主「kingmax54212008」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kingmax54212008/article/details/82731150
》》》》》》》》》》》》》》》》》》
通过setnx key value 实现分布式锁,通过del key 实现释放锁
最新文章
- 一步步开发自己的博客 .NET版(3、注册登录功能)
- ELK系统中kibana展示数据的时区问题
- android-android各大手机系统打开权限管理页面
- 翻阅《数据结构与算法javascript描述》--数组篇
- ADB工具 获取ROOT权限及复制文件方法
- Linux xargs命令
- ios app名字的多语言支持
- redis 异常排查
- C++中实现回调机制的几种方式(一共三种方法,另加三种)
- QT类的继承结构
- hdu1087Super Jumping! Jumping! Jumping!(最大递增序列和)
- 设计模式 - 模板方法模式(template method pattern) JFrame 具体解释
- CentOS利用Nginx+Docker部署.netcore应用
- 55. Jump Game(中等)
- angular.min.js:118 Error: [ng:areq] http://errors.angularjs.org/1.5.8/ng/areq?
- 初步了解three.js
- mysql 地理位置定位
- kmalloc vmalloc kzalloc malloc 和 get_free_page()【转】
- 转发:查看centos中的用户和用户组
- angular2.0学习笔记7.echarts 地图(type:'map')slice undifined 出错问题
热门文章
- R画柱形图和箱线图
- LeetCode 665. 非递减数列(Non-decreasing Array)
- [WCF] - 使用 bat 批处理文件将 WCF 服务部署为 Windows Service
- Quartz.Net—DateBuilder
- CMakeLists 添加 -pthread 编译选项 undefined reference to pthread_atfork
- 函数的第一类对象,f格式化,迭代器以及递归
- linux终端提示符修改
- 《MySQL数据库从入门到精通》 高级运维人才的必备书籍
- idea下spring boot jpa写原生sql的时候,报Cannot resolve table错误
- JAVA实现种子填充算法