PHP7使用Memcached做session存储读写失败的问题

1 篇文章 0 订阅
1 篇文章 0 订阅

背景:现在分布式服务搭建往往需要做session共享,这时候就需要缓存服务器来实现,我这里使用memecache,但是在php7中使用遇到了读写失败的问题

首先要知道memcached在PHP有两个扩展。分别是:

1、memcache

这个是早期的东西,所以现在网上很多资料可能都是以这个来说明的,如果你使用php5的话,用memcache的扩展把session存入memcache缓存服务中一点问题都没有,后面的内容也不需要再看了

**** 不过注意,php7的memcache的扩展也得到git去得到,官网的提供的不兼容php7 ****

2、memcached

如果你使用PHP7版本使用上面的memcache扩展做session存储可能就出现session_start()时读写memcached缓存服务失败

PHP Warning:  session_start(): Failed to read session data: memcache

这时候你就需要php7的memcached扩展来解决了。但是同样,官方也没有提供,需要到git去得到。

这里有具体的安装php7下memcached服务扩展的方法

memcache扩展安装传送门

以上安装完毕合适的扩展后,我们开始:

我这里使用PHP的ini_set()函数临时配置php.ini,当然你也可以去php.ini中全局配置。

使用memcache扩展的话,下面这样配置是完全没有问题的

define("MEMCACHE_IP", "tcp://172.18.72.35:18881");  //只是定义一个常量MEMCACHE_IP
ini_set("session.save_handler", "memcache");		//是memcache
ini_set("session.save_path", MEMCACHE_IP);

但如果你使用memcached扩展用上面的配置参数,可能会产生这样的报错

Failed to write session lock: getaddrinfo() or getnameinfo() HOSTNAME LOOKUP

需要修改为:

define("MEMCACHE_IP", "172.18.72.35:18881");  		//修改的地方,地址不能有tcp://
ini_set("session.save_handler", "memcached");		//是memcached,多一个d
ini_set("session.save_path", MEMCACHE_IP);

配置完后,测试memcached中session读写顺利通过。

最后总结,产生问题的主要原因还是memcache官方没有及时更新兼容PHP7版本。

另外还有,一些解决问题的思路,通过自写session处理类来解决,以下是参考,这里就不多做讨论了

https://blog.csdn.net/sinat_34712164/article/details/80310320
https://blog.csdn.net/doomsday0417/article/details/71087420(改成files等于不用memched了)
https://www.php.net/manual/zh/function.session-start.php(php官网说明:ctrl+F搜索session_start(): Failed to read session data)
https://blog.csdn.net/yuhunQ/article/details/88816899?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

有问题欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值