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 相关文章推荐
详解缓存穿透击穿雪崩解决方案
May 28 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
解析redis hash应用场景和常用命令
Aug 04 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
Springboot/Springcloud项目集成redis进行存取的过程解析
Dec 04 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
Redis高并发缓存架构性能优化
May 15 Redis
Redis基本数据类型Zset有序集合常用操作
Jun 01 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
基于Redission的分布式锁实战
Aug 14 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 字符转义 注意事项
2009/05/27 PHP
php csv操作类代码
2009/12/14 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
对python函数签名的方法详解
2019/01/22 Python
python导入坐标点的具体操作
2019/05/10 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Python能做什么
2020/06/02 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
企业给企业的表扬信
2014/01/13 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
2015年共青团工作总结
2015/05/15 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
SQL 聚合、分组和排序
2021/11/11 MySQL