apipost为啥能影响我这块代码的执行顺序?

先上代码:

$redis = Redis::connection();
$redisKey = 'hello';
$getRes = $redis->get($redisKey);
$setRes = $redis->set($redisKey, 1, 'EX', 59, 'NX');
dd($getRes, $setRes);

这个段代码,通过浏览器访问、postman、apifox、apipost5.x,请求结果:

apipost为啥能影响我这块代码的执行顺序?
是正常的。

但是如果用apipost6.1.0请求(这个版本的apipost解析laravel的dd/dump打印的值,解析非常慢),请求结果:

apipost为啥能影响我这块代码的执行顺序?

竟然在get中拿到了下一步存储的值,并且set返回null(实际在redis中设置成功了)。

如果1:把$redisKey改成 $redisKey = ‘hello’ . mt_rand(0,999); 执行结果就正常了,蒙圈1ing..
如果2:在get和set中间增加一行 dump(123);,执行结果也是正常了,蒙圈2ing..

为啥一个请求工具还能影响代码的执行结果???请大佬指点

补充:

$redis = Redis::connection();
$redisKey = 'hello467';
$getRes = $redis->get($redisKey);
$redis1 = Redis::connection();
$setRes = $redis1->set($redisKey, 1, 'EX', 59, 'NX');

info('get:' . ($getRes ? "有值":"没值") . '====set:' . ($setRes === null ? '失败了' : '成功了'));
sleep(5);
dd($getRes, $setRes);

日志:
[2022-04-27 15:11:23] local.INFO: get:没值====set:成功了
[2022-04-27 15:11:30] local.INFO: get:有值====set:失败了
为啥执行了两次(确定程序只运行了一次)。打印结果也是错误的。
跟laravel版本没啥关系,6、7、9都试了

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

在代码里面加点日志:

$redis = Redis::connection();
$logKey='logs';
$redisKey = 'hello467';
$getRes = $redis->get($redisKey);
$redis1 = Redis::connection();
$setRes = $redis1->set($redisKey, 1, 'EX', 59, 'NX');
$redis->lPush($logKey,json_encode(['get'=>$getRes,'set'=>$setRes]));
$logs=$redis->lRange($logKey,0,-1);
info('get:' . ($getRes ? "有值":"没值") . '====set:' . ($setRes === null ? '失败了' : '成功了'));
sleep(5);
dd($getRes, $setRes,$logs);
1年前 评论
helloStar (楼主) 1年前
renxiaotu (作者) 1年前
helloStar (楼主) 1年前
讨论数量: 8

会不会是执行代码前已经在 redis 写入值了?这里有个 59 秒的有效期,要注意。

$setRes = $redis->set($redisKey, 1, 'EX', 59, 'NX');

把 redis 中 key 清空(确保没有其他程序在写入这个 key),然后重新执行代码,应该就正常了。

1年前 评论
helloStar (楼主) 1年前
haodudecao (作者) 1年前
helloStar (楼主) 1年前

在代码里面加点日志:

$redis = Redis::connection();
$logKey='logs';
$redisKey = 'hello467';
$getRes = $redis->get($redisKey);
$redis1 = Redis::connection();
$setRes = $redis1->set($redisKey, 1, 'EX', 59, 'NX');
$redis->lPush($logKey,json_encode(['get'=>$getRes,'set'=>$setRes]));
$logs=$redis->lRange($logKey,0,-1);
info('get:' . ($getRes ? "有值":"没值") . '====set:' . ($setRes === null ? '失败了' : '成功了'));
sleep(5);
dd($getRes, $setRes,$logs);
1年前 评论
helloStar (楼主) 1年前
renxiaotu (作者) 1年前
helloStar (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!