未加星标

Redis 事务踩坑

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏
Redis 测试 Demo <php # 原子操作 redis 事务 $redis = new \Redis(); $redis->connect('127.0.0.1', '6379', 3); // 监控key WATCH 事务开启前监控key $redis->WATCH('test_hash'); // 开启事务 $redis->MULTI(); // 事务内执行写操作 $redis->set('test_hash', 2); $redis->set('test_hash', 1); // 提交事务 $redis->exec(); // 回滚事务 // $redis->discard(); redis 事务 需要通过 redis-cli monitor 监控中看到 正常提交流程

`

1544372307.803143 [0 127.0.0.1:37532] "MULTI" 1544372307.803225 [0 127.0.0.1:37532] "WATCH" "test_hash" 1544372308.923998 [0 127.0.0.1:37502] "SET" "test_hash" "2" 1544372312.803550 [0 127.0.0.1:37532] "SET" "test_hash" "1" 1544372312.803566 [0 127.0.0.1:37532] "EXEC" 1544372318.742735 [0 127.0.0.1:37502] "get" "test_hash" 如果事务中 中间监控key 发生变动 就会变成 1544372363.760832 [0 127.0.0.1:37556] "WATCH" "test_hash" 1544372363.760935 [0 127.0.0.1:37556] "MULTI" 1544372366.129051 [0 127.0.0.1:37502] "set" "test_hash" "2" 1544372368.761290 [0 127.0.0.1:37556] "EXEC"

从monitor 日志 可以看到 37556 端口实例监控 test_hash , 37502 端口实例修改了 test_hash exec 仍然提交 但中间没有提交

"SET" "test_hash" "2" "SET" "test_hash" "1"

开发中 PHP demo 操作 exec 返回

成功 :

array(2) { [0] => bool(true) [1] => bool(true) }

失败 :

bool(false)

还有个小彩蛋 测试了下 将 test_hash 类型改外其他 hash 或 zset 事务提交也会成功, 成功后将test_hash 改成 string 类型了. 这又点霸道了.

测试环境 redis 3.2.12

最后更新于 2018-12-09 16:49:47 并被添加「redis」标签,已有 1 位童鞋阅读过。

本文数据库(综合)相关术语:系统安全软件

代码区博客精选文章
分页:12
转载请注明
本文标题:Redis 事务踩坑
本站链接:https://www.codesec.net/view/621395.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(70)