当前位置:网站首页 > R语言数据分析 > 正文

redis为啥不使用长连接(redis为什么用)



这次给大家带来php使用redis长连接有哪些步骤,php使用redis长连接的注意事项有哪些,下面就是实战案例,一起来看一下。

php-redis在github上的项目地址:https://github.com/phpredis/phpredis

pconnect函数声明

其中time_out表示客户端闲置多少秒后,就断开连接。函数连接成功返回true,失败返回false:

下面的例子详细介绍了pconnect连接的重用情况。

pconnect使用介绍

对pconnect方法简单描述

使用该方法创建连接,连接不会在调用close方法之后关闭,只有在进程结束之后该连接才会被关闭。

[待验证]如果使用的是长连接,Redis配置文件中的timeout配置项需要设置为0,否则连接池中的连接会因为超时而失效

针对PHP-FPM来说明一下pconnect

关闭长连接

可以调用close和unset方法,但两则差异很大:

- close的作用仅仅是使当前PHP进程不能再进行redis请求,但无法真正关闭redis长连接,连接在后续请求中仍然会被重用,直FPM进程生命周期结束。所以close 并不会销毁redis对象,只是断开连接而已。

- unset 变量才会销毁。也需要注意并不是使用了 pconnect 就不要 close 了,如果当前脚本执行时间很长 那么也会一直占用一个连接的。

如何判断当前Redis是否处于连接状态

等效的问题是,在单例模式中,判断当前实例是否有效。

习惯上调用echo,判断是否正常返回字符串本身,或者调用ping,查看返回值是否为 +PONG。

但是需要特别小心的是,在redis断开连接之后,调用echo以及ping(返回'+POMG')时,均会抛出异常。所以要通过异常捕获机制来处理。

代码分析pconnect连接重用的问题

情况一:非单例模式。

情况二:单例模式。

将上述的代码修改,a和b都通过getInstance来生成。生成的前提是判断当前实例是否存在。单例模式的混淆点在于:

两种情况都说明了连接重用的问题。如何修复这个bug?两点:

所以代码可以做调整为返回一个单例数组:

需要注意的地方

避免在Task类成员变量中使用redis对象。

在redis的单例模式中,声明了time_out的过期时间。如果redis处理的场合是一个任务,而任务调用redis间隔时间又比较长。当间隔大于time_out时候,redis就会断开连接,这时候所有对redis的操作都会失效。解决的办法就是避免这种调用方式,通过在调用的地方动态声明redis类来执行。这种问题对于长连接和短链接是没有区分,属于调用的方式错误。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

以上就是php使用redis长连接有哪些步骤的详细内容,更多请关注php中文网其它相关文章!

到此这篇redis为啥不使用长连接(redis为什么用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 删除虚拟环境的命令(virsh删除虚拟机的命令)2025-07-18 11:36:04
  • 连接redis(连接redis不需要用户名么)2025-07-18 11:36:04
  • storecode翻译中文(store state翻译)2025-07-18 11:36:04
  • 连接redis不需要用户名么为什么(redis连接不到服务器怎么办)2025-07-18 11:36:04
  • spring教程pdf(spring教程推荐)2025-07-18 11:36:04
  • xavier serrano运动员(xavier球员)2025-07-18 11:36:04
  • redis 连接拒绝(redis-cli连接拒绝)2025-07-18 11:36:04
  • modbus rtu 报文(modbus RTU 报文读写多个寄存器)2025-07-18 11:36:04
  • ueditor官网版本(ueditor官网下线了)2025-07-18 11:36:04
  • none 什么意思(quencher设置为none什么意思)2025-07-18 11:36:04
  • 全屏图片