Redis学习笔记:事务
来源:互联网 发布:淘宝一天最多刷几单 编辑:程序博客网 时间:2024/06/05 06:43
Redis学习笔记:事务
原文链接:Redis学习笔记:事务
一、事务的描述
和MySQL
一样,Redis
中也有事务
这一个概念,redis中的事务也是可以用来执行一组命令的集合,同时也可以把事务当作一个命令。因为它的特性和命令无差,要么正确全部运行,要么错误都不运行。但是和MySQL
的事务不同的是,redis中的事务不支持回滚操作。也就是说,一旦事务出错,它没有办法再回到程序出错前,只能由程序员自己想办法来处理剩下的烂摊子。
二、使用事务
redis中使用事务需要用到MULTI
和EXEC
命令:在一个事务开始前输入MULTI
,然后执行我们的命令,最后使用EXEC
提交,只有执行EXEC
后,事务才会被提交,命令才会生效,例如:
127.0.0.1:6379> multiOK127.0.0.1:6379> set k 1QUEUED127.0.0.1:6379> set v 2QUEUED127.0.0.1:6379> get kQUEUED127.0.0.1:6379> exec1) OK2) OK3) "1"
当我们使用MULTI
命令后,接下来的所有命令都会被redis放到一个事务队列当中去,直到输入EXEC
后redis才会把这些命令依次都提交,并根据顺序依次返回结果。
三、错误处理
事务对错误的处理分为以下两种情况:
3.1 语法错误
如果命令出现语法错误,例如命令输入错误或者参数个数错误,这种情况下redis会直接返回错误,并且事务中所有的语句都不会被执行:
127.0.0.1:6379> multiOK127.0.0.1:6379> set k 2QUEUED127.0.0.1:6379> abc k 1(error) ERR unknown command 'abc'127.0.0.1:6379> set k(error) ERR wrong number of arguments for 'set' command127.0.0.1:6379> exec(error) EXECABORT Transaction discarded because of previous errors.
3.2 运行错误
运行错误是指在redis运行时才能发现的错误,例如用散列的命令操作字符串等等,这种情况下redis会执行正确的命令并返回错误的命令:
127.0.0.1:6379> multiOK127.0.0.1:6379> set key 1QUEUED127.0.0.1:6379> sadd key 2QUEUED127.0.0.1:6379> set key 3QUEUED127.0.0.1:6379> exec1) OK2) (error) WRONGTYPE Operation against a key holding the wrong kind of value3) OK
由于redis时没有提供类似Rollback
的功能,所以出现这种错误的时候我们只能自己想办法来弥补这个错误。同时这也就要求程序员在进行redis操作时严谨一些,尽量避免此类错误。
四、WATCH
和关系型数据库不同的是,MySQL
和Oracle
在执行事务的时候会对事务操作的数据加锁,其他的的客户端在事务执行完毕之前都无法对数据进行更改。而redis执行事务时却不同,它并不能阻止其他客户端修改事务中要处理的数据,这个时候就需要用到WATCH
命令。WATCH
命令可以用来监控一个键,一旦它监控的键发生了更改,它之后的事务就不会被执行:
127.0.0.1:6379> set key 1OK127.0.0.1:6379> watch keyOK127.0.0.1:6379> set key 2OK127.0.0.1:6379> multiOK127.0.0.1:6379> set key 3QUEUED127.0.0.1:6379> exec(nil)127.0.0.1:6379> get key"2"
这里由于在MUTLI
之前运行更改了key
的值为2,所以事务中的语句set key 3
不会被执行。
在执行WATCH
后如果想取消监控可以使用UNWATCH
命令,或者等到下次执行EXEC
命令自动取消监控。
- Redis 事务学习笔记
- Redis学习笔记:事务
- [Redis学习笔记]-Redis 事务
- 《Redis源码学习笔记》事务
- Redis学习笔记八、事务
- 【学习笔记】Redis(4)-事务
- Redis学习笔记1 事务
- Redis学习笔记6--Redis事务
- Redis学习笔记6--Redis事务
- Redis学习笔记6--Redis事务
- redis学习笔记5(redis事务)
- redis学习笔记四之事务
- redis学习笔记四之事务
- 四 redis学习笔记之事务
- Redis学习笔记(三)--事务
- redis学习笔记(19)---事务
- Redis系列学习笔记12 事务
- 四 redis学习笔记之事务
- 【Scikit-Learn 中文文档】优化估计器的超参数
- eclipse中用jdbc连接数据库插入删除的代码
- java集合(二)
- [Rcode]ifelse函数:用平均值替代缺失值,或对数据不同水平分组
- kafaka学习进度追踪
- Redis学习笔记:事务
- 第十四周训练总结(一)
- 状态模式
- 软件测试的艺术————学习笔记2
- Matrices and Vectors
- c++ 如何输出8进制和十六进制和二进制
- h5考前复习
- MySQL 启动服务错误:“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
- 【Scikit-Learn 中文文档】模型评估: 量化预测的质量