首页 > 数据库 >【Azure Redis】PHPRedis遇见SSL Connection Timeout问题

【Azure Redis】PHPRedis遇见SSL Connection Timeout问题

时间:2024-01-22 22:01:47浏览次数:34  
标签:请求 PHPRedis Redis SSL Connection Timeout 超时 客户端

问题描述

PHP Redis客户端遇见使用SSL Connection timeout,遇见问题后,切换回去Non-SSL没有出现问题。但是切换回SSL后,还是偶尔遇见Connection timeout问题。

目前timeout设置时间为5秒,并且为例重用连接,启用了持久化 redis.pconnect.pooling_enabled为1.

【Azure Redis】PHPRedis遇见SSL Connection Timeout问题_客户端

是否有办法来缓解Timeout问题呢?

 

问题解答

因为Redis推荐尽可能使用TLS V1.2加密通信,所以为例应用安全,还是需要使用SSL Connection,不能使用non-SSL。

焦距在PHP Redis的客户端配置上,根据如下情景发生的可能性,在解释发生Timeout的情况后,增大 Timeout 的设置为一个有效的解决方案。

请求/响应过大可能导致超时。

  1. 假设客户端上配置的超时值为 5 秒。
  2. 应用程序(使用相同的物理网络连接)的同时请求两个键 (例如,A 和 B)。
  3. 大多数客户端支持对请求进行“管道操作”,使得请求“A”和“B”可以逐个发送,而无需等待响应。
  4. 服务器会按相同顺序将响应发送回来。
  5. 如果响应“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 将大大改善超时或性能问题。

开发最佳实践:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices-development#large-request-or-response-size

 

/end/

标签:请求,PHPRedis,Redis,SSL,Connection,Timeout,超时,客户端
From: https://blog.51cto.com/u_13773780/9370473

相关文章

  • redis 切面拦截 防重复提交
    /***aop防止并发请求*/@Slf4j@Aspect@ComponentpublicclassLimitRequestAspect{@AutowiredRedisHelperredisHelper;@Around("@annotation(limitRequest)")publicObjectaround(ProceedingJoinPointpoint,LimitRequestlimitRequest)throwsTh......
  • 关于spring.redis.cluster集群部分Master节点故障后 交易中断60秒解决方案
     背景  第一种方案:公司项目做性能测试,redis集群选用cluster集群模式,开始选用3主3从,共3台服务器,每个服务器一主一从。    服务器A  redis8001 8002    服务器B  redis8003 8004     服务器C  redis8005 8006    8001主    ......
  • Redis分布式锁
    Redis分布式锁今天在做Lottery分布式抽奖项目中,接触到了分布式锁这个概念,普通单机系统中,我们可以使用mutex、cas等方式来确保不同线程之间的同步和互斥,但是显然在分布式系统下,如果想让所有机器在同一时刻只有一个线程可以访问到某个共享资源,那么传统的互斥方法不再可用。这时候就......
  • 记录使用Redis当分布式锁
    在网上看到一次使用redis当分布式锁的文章,我就自己写了个demo前置条件:建议新建一个springboot工程(添加web依赖),然后自行整合mybatisplus、redis,可以参照以下链接:mybatisPlus:https://blog.csdn.net/wang20000102/article/details/132615071redis:https://blog.csdn.net/lwj_07/art......
  • python redis示例
    Redis是一个基于内存的高性能键值对(key-value)存储系统,同时也支持丰富的数据结构,如字符串、哈希表、列表、集合、有序集合等。在Python中,我们通常使用redis-py这个第三方库来连接和操作Redis。以下是一个基本的使用步骤以及各种数据结构操作的示例:1.安装redis-py库pipinstall......
  • redis 安装教程
    一、初始化环境创建redis运行时的用户和组$groupaddredis$useradd-gredisredis-s/sbin/nologin-M初始化数据目录$rm-rf/data/redis$mkdir-pv/data/redis$chown-Rredis:redis/data/redis初始化日志目录$mkdir-pv/data/logs/redis$chown-Rredis:redis/......
  • 面试官:Redis持久化能关吗?怎么关?
    数据持久化是指将数据从内存中,保存到磁盘或其他持久存储介质的过程,这样做的目的是为了保证数据不丢失。而Redis的持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性(防止缓存雪崩、缓存击穿等问题)和数据不丢失。Redis持久化能关吗?怎么关?Redis持久化默认是开启的,......
  • django使用redis集群、连接池、MySQL连接池
    redis的相关设置CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":["redis://127.0.0.1:6379/1","redis://127.0.0.1:6380/1",#...],"OPTIONS":{"CLIENT_......
  • Redis常见面试题
    一、Redis做什么的,在哪些场景下使用Redis是一个开源的内存数据存储系统,它被广泛用于缓存、消息队列、实时统计分析、任务队列等场景。以下是一些常见的使用场景:缓存:Redis的主要用途之一是作为缓存层。它可以将经常访问的数据存储在内存中,以提高读取速度。常见的应用场景包括页面缓......
  • redis后台启动带脚本命令
    redis后台启动带脚本命令(windwos)方法11.新建.txt文件2.编辑文件内容@echooffstartcmd/c"cd/dD:\JAVA\Redis-x64-3.2.100&&redis-server.exeredis.windows-service.conf&&taskkill/f/t/imcmd.exe"改为.bat启动方法2服务启动如果原来已有redis服务,先将其卸载red......