Redis 事务踩坑

栏目: 数据库 · 发布时间: 7年前

内容简介:`从monitor 日志 可以看到开发中 PHP demo 操作

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 位童鞋阅读过。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

共享经济

共享经济

[美] 罗宾•蔡斯 / 王芮 / 浙江人民出版社 / 2015-9-25 / 59.90元

[内容简介]  在当今这个稀缺的世界里,人人共享组织可以创造出富足。通过利用已有的资源,如有形资产、技术、网络、设备、数据、经验和流程等,这些组织可以以指数级成长。人人共享重新定义了我们对于资产的理解:它是专属于个人的还是大众的;是私有的还是公有的;是商业的还是个人的,并且也让我们对监管、保险以及管理有了重新的思索。  在这本书中,罗宾与大家分享了以下观点:  如何利用过剩......一起来看看 《共享经济》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具