redis调用二维码时的不断刷新排查分析


Posted in Redis onApril 01, 2022

一、背景和现象

项目是PHP开发的,点击登录的时候就根据随机数生成了二维码,缓存在了redis。用户用微信扫描了二维码分析出需要请求的链接,然后微信浏览器就请求了服务器,服务器通过了随机数认证。正当请求了之后,服务器就拿服务器找出来的的APPID去微信服务器请求。微信准许登陆,服务器修改状态。这个时候websocket服务器修改了状态,把修改状态的事告诉浏览器,浏览器变更状态。如果没有websocket的情况下,浏览器不断的询问服务器是否修改了状态,不能设置得太频繁所以慢。扯远了,这里关键就是说生成的二维码一直在变,不知道怎么回事。redis+sentinel+haproxy的模型做好了,就切换到项目使用。可以打开页面,本以为完全正常,谁知道在二维码登录的时候,二维码一直在刷新。

二、分析

用户在页面上请求,二维码就生成存在redis里面。页面在获取,获取不到就继续请求。问题可能出现在redis的读写权限上面。

三、排查

1、把redis的配置指向之前用的redis,空出redis集群来调试。通过haproxy登录redis,模拟真实场景,然后用set命令。定义了一个键值。在用get读取出来,能读出值。说明在haproxy上读写都不成问题。

redis调用二维码时的不断刷新排查分析

redis调用二维码时的不断刷新排查分析

既然在用命令行读写没问题,可以试试用PHP读写有没有问题。

2、编辑PHP脚本,执行。

<?php
$redis = new redis();
$result = $redis->connect('**.**.**.**', 6379);
$result = $redis->auth('******');
$result = $redis->set('test',"renhaoqiang");
$result = $redis->get('test');
var_dump($result); //结果:bool(true)
?>

redis调用二维码时的不断刷新排查分析

执行结果,

redis调用二维码时的不断刷新排查分析

如此一来,PHP读写也不成问题。那就用apache执行看看,

redis调用二维码时的不断刷新排查分析

同样没问题。暂时排除读写权限问题。

3、其实可以先不做以上两个步骤的排查。都还没确定是不是真的是redis的问题。这一步找到集群中的master,然后直接在项目的配置文件中设置指向master,这样就避开了haproxy,可以确定是不是haproxy的问题。

redis调用二维码时的不断刷新排查分析

redis调用二维码时的不断刷新排查分析

问题也没有解决,那就只能先排除haproxy的问题了。难道是redis集群的问题?

4、那就用同样的方法创建一个redis,打上去看有没有问题。因为这种方式跟平时的网络方式有点不同。首先去配置文件的目录复制配置文件,改端口。创建了之后改项目配置指向的时候,发现问题还在,那就可以排除集群的兼容性。可能是因为host="net”的这种网络方式。

docker run -d --net="host" -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -v /Redis-cluster/5379:/data -v /usr/local/configurefiles/redis-cluster/etc/redis-5379.conf:/usr/local/redis/etc/redis.conf --name redis-5379 **.**.**.**:5000/redis:3.2 redis-server /usr/local/redis/etc/redis.conf

5、用以前端口映射的那种方式新建一个redis,端口5267。

docker run -d -p 5267:6379 -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone -v /RedisData:/data -v /usr/local/configurefiles/redis/etc:/usr/local/redis/etc --name redis **.**.**.**:5000/redis:3.2 redis-server /usr/local/redis/etc/redis.conf

发现问题依旧。现在也可以暂时排除host="net”这种网络方式的问题。和原来那种不同的只是映射的端口,那就是这个端口的问题了。

6、排查到这一步,问题渐渐冒出来了。应该是5268这个端口已经被绑定,换其他端口都不行。或者是配置文件绑定,或者是代码绑定。配置文件全在我的掌握中,这个可以排除。因为在正式环境是用6379这个端口,那么代码绑定这个也排除了。做这样一种假设,项目对redis的请求可以跟着我的配置随时变,但是swoole没重启一次就固定一次。

先不想那么多,赶紧重启websocket服务器,问题果然没了。

原来是页面请求二维码的时候代码就生成,存在了redis里面。但是websocket从redis里面一直没有获取到,因为他的端口一直是旧的那个,页面的随机数一直都是在redis找不到一样的,所以一直刷新,如此循环。重启了swoole了之后,他请求的那个redis也是配置文件里面最新的,所以能成功在redis找到和浏览器一样的随机数。此次排除到,我的服务都,没有问题。倒是曲折的排查过程更丰富我的逻辑思路。

以上就是redis调用二维码时的不断刷新排查分析的详细内容,更多关于redis调用二维码不断刷新排查的资料请关注三水点靠木其它相关文章!

Redis 相关文章推荐
Redis持久化与主从复制的实践
Apr 27 Redis
redis哨兵常用命令和监控示例详解
May 27 Redis
Redis 哨兵集群的实现
Jun 18 Redis
浅析Redis Sentinel 与 Redis Cluster
Jun 24 Redis
springboot使用Redis作缓存使用入门教程
Jul 25 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
redis数据结构之压缩列表
Mar 21 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis 限流器
May 15 Redis
Redis+AOP+自定义注解实现限流
Jun 28 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Redis分布式锁的7种实现
Redis 哨兵机制及配置实现
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 #Redis
Redis 操作多个数据库的配置的方法实现
Mar 23 #Redis
Redis安装使用RedisJSON模块的方法
Mar 23 #Redis
解决redis批量删除key值的问题
Mar 23 #Redis
You might like
PHP文件上传实例详解!!!
2007/01/02 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
php中and 和 &amp;&amp;出坑指南
2018/07/13 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
vue实现表格过滤功能
2019/09/27 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
tornado框架blog模块分析与使用
2013/11/21 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python如何查看网页代码
2020/06/07 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
趣味游戏活动方案
2014/02/07 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
药剂专业求职信
2014/06/20 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2014全年工作总结
2014/11/27 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
小组口号霸气押韵
2015/12/24 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
JavaScript实现队列结构过程
2021/12/06 Javascript
尝试使用Python爬取城市租房信息
2022/04/12 Python
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android