【Azure Redis】PHPRedis遇见SSL Connection Timeout问题
问题描述
PHP Redis客户端遇见使用SSL Connection timeout,遇见问题后,切换回去Non-SSL没有出现问题。但是切换回SSL后,还是偶尔遇见Connection timeout问题。
目前timeout设置时间为5秒,并且为例重用连接,启用了持久化 redis.pconnect.pooling_enabled为1.

是否有办法来缓解Timeout问题呢?
问题解答
因为Redis推荐尽可能使用TLS V1.2加密通信,所以为例应用安全,还是需要使用SSL Connection,不能使用non-SSL。
焦距在PHP Redis的客户端配置上,根据如下情景发生的可能性,在解释发生Timeout的情况后,增大 Timeout 的设置为一个有效的解决方案。
请求/响应过大可能导致超时。
- 假设客户端上配置的超时值为 5 秒。
- 应用程序(使用相同的物理网络连接)的同时请求两个键 (例如,A 和 B)。
- 大多数客户端支持对请求进行“管道操作”,使得请求“A”和“B”可以逐个发送,而无需等待响应。
- 服务器会按相同顺序将响应发送回来。
- 如果响应“A”较大,可能会消耗掉后续请求的大部分超时时间。
在以下示例中,请求“A”和“B”快速发送到服务器。 服务器开始快速发送响应“A”和“B”。 由于数据传输需要时间,即使服务器的响应速度很快,响应“B”也必须等到响应“A”超时。
|-------- 5 秒超时时间(A) -----------|
|- A 请求 -|
~~~~~|-------- 5 秒超时时间(B) -----------|
~~~~~|- B 请求 -|
~~~~~~~~~~|- 读取A请求的响应 ---|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|- 读取 B 请求的响应 -| (**超时**)
所以,当发生Timeou的情况后,最有效的解决办法就是适当增加Timeout时间。
参考资料
Connection Parameters :https://github.com/predis/predis/wiki/Connection-Parameters
PHP Best Practices:https://gist.github.com/JonCole/925630df72be1351b21440625ff2671f#file-redis-bestpractices-php-md
重用连接
在 PHP 客户端中遇到的最常见问题是它们要么不支持持久连接,要么默认禁用重用连接的能力。
当不重用连接时,意味着每次发送请求时都要支付建立新连接的成本,包括 SSL/TLS 握手。这会给请求时间增加大量延迟,并且会在应用程序中表现为性能问题.
此外,如果您的请求速率很高,这会在 Redis 客户端和服务器端都产生大量的 CPU 消耗,从而导致其他问题。 例如,Predis Redis 客户端有一个默认为 false 的“persistent”连接属性。将“persistent”属性设置为 true 将大大改善超时或性能问题。
/end/
【Azure Redis】PHPRedis遇见SSL Connection Timeout问题的更多相关文章
- 【Azure Redis 缓存】Linux虚拟机中使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel)
问题描述 在Azure Redis的官方文档中,介绍了在Windows下,如何通过redis-cli.exe连接Redis, 包含如何配置stunnel使得通过 6380,SSL方式连接到Redis ...
- 【Azure Redis 缓存】云服务Worker Role中调用StackExchange.Redis,遇见莫名异常(RedisConnectionException: UnableToConnect on xxx 或 No connection is available to service this operation: xxx)
问题描述 在Visual Studio 2019中,通过Cloud Service模板创建了一个Worker Role的角色,在角色中使用StackExchange.Redis来连接Redis.遇见了 ...
- 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost
问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...
- 【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
问题描述 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connecti ...
- 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
问题描述 使用Python连接Azure Redis服务,因为在代码中使用的是Djange-redis组件,所以通过如下的配置连接到Azure Redis服务: CACHES = { "de ...
- 【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
问题描述 在使用Azure Redis时,遇见Read Timed out异常, Redis的客户端使用的时jedis.问题发生时,执行redis部分指令出错,大部分get指令,set指令能正常执行. ...
- Azure Redis Cache
将于 2014 年 9 月 1 日停止Azure Shared Cache服务,因此你需要在该日期前迁移到 Azure Redis Cache.Azure Redis Cache包含以下两个层级的产品 ...
- Azure Redis Cache (2) 创建和使用Azure Redis Cache
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 注意: 截至今日2015年10月7日,国内由世纪互联运维的Azur ...
- 使用Azure Redis Cache
通过上一篇博客<Redis Cache 简介>我们已经简单了解了Azure Redis Cache,这里就不过多赘述了. 1.创建Redis Cache 创建Redis Cache之前,我 ...
- PHP连接Azure Redis
概述 Azure Redis缓存基于流行的开源Redis缓存,可以通过各种Redis客户端进行访问,这些客户端适用于许多编程语言.每个客户端有自身的API,用于通过Redis命令调用Redis缓存实例 ...
随机推荐
- 使用Docker快速搭建InnoDB Cluster集群的过程
感谢 感谢方神的大力帮助,自己对数据库基本一窍不通.只是照葫芦画瓢做出来的. 感谢来自如下两个网站的资料,我进行了一定程度的融合. https://blog.csdn.net/weixin_43972 ...
- UOS关闭激活提示: Your system is not activated. Please activate as soon as possible for normal use.
最近公司里面进行UOS的兼容性验证,但是系统总是会提示: Your system is not activated. Please activate as soon as possible for n ...
- 21.10 Python 使用CRC32校验文件
CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以 ...
- LyScriptTools 模块类API接口手册
LyScriptTools工具包是在LyScript模块基础上封装的工具包,其主要是二次封装LyScript插件实现的一些新功能,或者将特定功能组件拆分开形成的独立模块,此类模块可实现更加精细化的功能 ...
- C/C++ 实现获取Linux系统参数
今天忙活了半天,在Linux平台下,总算可以获取到一些性能指标了,结果,Linux上面的数据发送到Windows上面会出现发送为空的现象,可能是Socket套接字存在问题,不搞了. #include ...
- centOS系统 迁移docker镜像及数据文件到指定目录
话说我今天正在快乐的敲代码,突然看到IDE报警磁盘空间不足了,du -h 查看了一下磁盘占用情况,发现是自己的docker镜像全部放/var/lib/docker目录下 这个系统磁盘给根目录只分配了5 ...
- .NetCore 三种生命周期注入方式
.NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入方式的使用,分别是: AddTransient:每次请 ...
- 外部文件使用django的models
#外部文件使用django的models,需要配置django环境 import os if __name__ == '__main__': os.environ.setdefault("D ...
- PHP header的几种用法
PHP header的几种用法 定义:header() 函数向客户端发送原始的 HTTP 报头. 1. 跳转页面 header('Location:'.$url); //Location和" ...
- KB0002.对DoraCloud的桌面模板系统盘进行扩容
KB0002.对DoraCloud的桌面模板系统盘进行扩容 DoraCloud的桌面是根据桌面模板创建的.桌面模板包含了系统盘.有时系统盘的空间不满足需求,就需要对系统盘大小进行调整. 我们以Hype ...