redis事务处理:(error) EXECABORT Transaction discarded because of previous errors.
来源:互联网 发布:java imageio.read 编辑:程序博客网 时间:2024/06/13 06:18
4.1.2 错误处理
有些读者会有疑问,如果一个事务中的某个命令执行出错,Redis 会怎样处理呢?要回答这个问题,首先需要知道什么原因会导致命令执行出错。
(1)语法错误。语法错误指命令不存在或者命令参数的个数不对。比如:
- redis> MULTI
- OK
- redis> SET key value
- QUEUED
- redis> SET key
- (error) ERR wrong number of arguments for 'set' command
- redis> ERRORCOMMAND key
- (error) ERR unknown command 'ERRORCOMMAND'
- redis> EXEC
- (error) EXECABORT Transaction discarded because of previous errors.
跟在MULTI命令后执行了3个命令:一个是正确的命令,成功地加入事务队列;其余两个命令都有语法错误。而只要有一个命令有语法错误,执行EXEC命令后Redis就会直接返回错误,连语法正确的命令也不会执行 。
(2)运行错误。运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的,所以在事务里这样的命令是会被Redis接受并执行的。如果事务里的一条命令出现了运行错误,事务里其他的命令依然会继续执行(包括出错命令之后的命令),示例如下:
- redis> MULTI
- OK
- redis> SET key 1
- QUEUED
- redis> SADD key 2
- QUEUED
- redis> SET key 3
- QUEUED
- redis> EXEC
- 1) OK
- 2) (error) ERR Operation against a key holding the wrong kind of value
- 3) OK
- redis> GET key
- "3"
可见虽然SADD key 2出现了错误,但是SET key 3依然执行了。
Redis的事务没有关系数据库事务提供的回滚(rollback) 功能。为此开发者必须在事务执行出错后自己收拾剩下的摊子(将数据库复原回事务执行前的状态等)。
不过由于Redis不支持回滚功能,也使得Redis在事务上可以保持简洁和快速。另外回顾刚才提到的会导致事务执行失败的两种错误,其中语法错误完全可以在开发时找出并解决,另外如果能够很好地规划数据库(保证键名规范等)的使用,是不会出现如命令与数据类型不匹配这样的运行错误的。
0 0
- redis事务处理:(error) EXECABORT Transaction discarded because of previous errors.
- The Visual Studio Debugger ({C9DD4A57-47FB-11D2-83E7-00C04F9902C1}) did not load because of previous errors.
- tar:Error exit delayed from previous errors
- ERROR 1129 (HY000): Host '192.168.153.135' is blocked because of many connection errors; unblock wit
- ERROR 1129 (00000): Host 'XXXXXX' is blocked because of many connection errors; unblock with 'mysqla
- ERROR 1129 (00000) Host * is blocked because of many connection errors; unblock with ‘mysqlad解决
- ERROR 1129 (00000) Host * is blocked because of many connection errors; unblock with ‘mysqlad解决
- MYSQL不能连接了,错误ERROR 1129 (00000): Host ” is blocked because of many connection errors;
- ERROR 1129 (HY000): Host '' is blocked because of many connection errors;
- Mysql ERROR 1129 (00000): Host 'XXXXXX' is blocked because of many connection errors; unblock with '
- 解决because of many connection errors
- error listener start;startup failed due to previous errors
- tar: Error exit delayed from previous errors 的问题解决办法!
- tar: Error exit delayed from previous errors 的问题解决办法!
- tar: Error exit delayed from previous errors错误解决办法
- error listenerStart context [] startup failed due to previous errors
- mysql error 1129: Host 'bio.chip.org' is blocked because of many connection errors; unblock with 'my
- error: previous declaration of '****' was here
- JEECG 开源平台全视频和文档
- 关于客户端数据包的抓取
- PCI 中的base address register
- Partially applying functions
- 页面最小宽度设定
- redis事务处理:(error) EXECABORT Transaction discarded because of previous errors.
- Linux中Samba详细安装
- 黑马程序员_Java基础加强_代理
- 解决iOS7中,tableView设置UITableViewStyleGrouped后的section之间空余问题
- WebStorm中怎么配置supervisor来发布Node服务
- SQL统计每天的登录次数
- 洲思zCloud公有云版发布
- 无敌的跨站神器 PHP json_encode
- MD5加密解密例子1