[]利用memcached在多台服务器之间共享PHP的session数据

最近我的几篇文章都是是最近项目的一点心得^^
这个项目一开始就设计的”很大”,考虑了很多负载均衡方面的东西,比如采用nginxphp的请求分摊到若干个运行php fastcgi的独立服务器中。这样的设计 除了在每个php fastcgi服务器中要保存一份程序的拷贝以外, 还有一个亟待解决的问题。由于php fastcgi进程分别运行在不同的服务器上,默认的,php的session数据是在各个服务器上分别存放的,这样的话,如果在某一次php请求过 后,nginx将php请求发送到了另外集群中的另外一台php fastcgi服务器,那么就会导致session的丢失。经过一系列考虑,项目组决定采用一台独立memcached服务器来存储整个项目的php session数据,再通过改写php的session处理函数来对memcached服务器进行数据读写,然后解决各个php fastcgi中session不同步的问题。

项目背景基本上就是上面说的那些,下面大概说说相关的网络环境,然后进入具体的配置、实现过程:

1、nginx服务器一台,IP地址:172.16.236.208
2、php fastcgi服务器两台,IP分别为:172.16.236.210,172.16.236.211
3、memcached服务器一台,IP为:172.16.236.220

为了简化操作过程,上面的环境仅仅是达到项目需求的假设,实际项目中还有许多额外的处理。

首先,修改nginx虚拟主机配置,将php的请求分发到各个php fastcgi服务器去,

第二步,为php fastcgi服务器安装php-memcache扩展,参见:memcached、php-memcache安装笔记
啰嗦一句,这一步其实只需在一台服务器上进行,其他php fastcgi的配置其实可以偷懒,就是将之前编译好的memcache.so拷贝到需要配置的服务器中,然后修改php.ini可以加载这个扩展即可。

第三步,修改项目php源代码,使php的session存取使用memcached。
之前没有认真去读php的手册,先是自己写session的handler,然后又碰到一些奇怪的问题。最后在php官方的memcache说明中找到了最简单的办法,其实只要在调用session_start()之前执行如下代码:

其中$host是memcached服务器的ip地址,$port是memcached监听的端口。

执行了如下代码以后,所有php fastcgi服务器的session操作都同步到了memcached服务器,而对于项目的php代码来说,以前该怎么用还是怎么用,完全可以不用像这篇博客开头那样,以为要改写php的session处理函数了。

再次感叹一下,php官方的说明文档真是无比强大…以后真不应该这么自信,还是应该先去官方仔细找找~

转发:http://xuebingnanmm.iteye.com/blog/686825

Original: https://www.cnblogs.com/lxwphp/p/15847781.html
Author: 码农编程进阶笔记
Title: []利用memcached在多台服务器之间共享PHP的session数据

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543015/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【力扣】11. 盛最多水的容器

    给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i…

    Java 2023年6月8日
    079
  • 数据类型(Java)

    数据类型分类 1.基本数据类型 数值类型: 整数类型: byte【(1个字节),范围:-128-127】 short【(2个字节),范围:-32768-32767】 int【(4个…

    Java 2023年6月9日
    073
  • entity序列化问题

    创建entity的时候一般会序列化一下,虽然基本不会用到 ,但是没有序列化的话深克隆就会出错 序列化就是对实例对象的状态(State 对象属性而不包括对象方法)进行通用编码(如格式…

    Java 2023年6月13日
    084
  • springboot集成rabbitmq

    主题交换机有fanout(扇形)、direct(直连)、topic(主题)三种。而主题交换机是可以通过配置包含前两种的,所以,本篇主要介绍主题交换机。 topic路由器的关键在于定…

    Java 2023年5月30日
    077
  • Day1 使用MarkDown

    二级标题 三级标题 Hello,world Hello,world Hello,world Hello,world java 分割线 超链接 A B VC https://imag…

    Java 2023年6月5日
    082
  • java中的泛型(自定义泛型)

    引出问题 当我们在集合中加入数据的时候想要对数据进行约束。比如:就想传入自己创建的对象 遍历的时候,需要进行类型转换,如果结合中的数据量较大,对效率有影响 * java;gutte…

    Java 2023年6月6日
    085
  • nginx去掉inde.php方法

    /** * 打开nginx配置文件nginx.conf,添加以下内容 * 注意层级,在 http{ server { location { #这里添加 } } } 添加 */ lo…

    Java 2023年5月30日
    072
  • mac下安装MYSQL-python

    今天在mac电脑上安装python的mysql时出现如下问题: 该安装时是使用sudo pip install MySQL-python来安装mysql模块,安装没有问题,但是在p…

    Java 2023年6月8日
    095
  • Java程序猿怎样高速理解Kubernetes

    我们希望微服务是可复制的。可替换的工作节点。这样能够轻松进行升级或降级,同一时候无需不论什么停机时间,并花费最少代价的管理。 我们能够说我们希望他们成为我们的小黄人(minions…

    Java 2023年5月29日
    078
  • github打不开怎么办

    打开以下三个网址,分别取各个网址如下图所示位置的IP地址 github网址查询: github域名查询: 修改hosts文件,路径为c:\windows\system32\driv…

    Java 2023年6月5日
    077
  • 【0基础学java】教学日志:javaSE-面向对象4-继承、super、方法重写、抽象类、抽象方法、final、Object类

    本章概述 ​一、继承 类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。 提高代码的复用性! extends的意思是”扩展”。子类是父…

    Java 2023年6月5日
    050
  • markdown语法

    幽离的小日常markdown语法; 标题 一级标题 二级标题 三级标题 ……. 字体 粗体 斜体 斜粗体 删除线 引用 引用效果 分割线 图片 ! 超链接 …

    Java 2023年6月5日
    0107
  • HTTP长连接–Keep-Alive

    一、 HTTP/1.0 HTTP1.0版本的Keep-alive并不像HTTP1.1那样是默认发送的,所以要想连接得到保持,必须手动配置发送connection:keep-aliv…

    Java 2023年6月13日
    070
  • mybatis-plus

    Mybatis&Mybatis Plus MP官网 https://baomidou.com/ mybatis开发流程 crud: 编写实体类-》 编写Controller…

    Java 2023年5月30日
    084
  • Linux firewall防火墙设置

    1、查看firewall服务状态 2、查看firewall的状态 3、开启、重启、关闭、firewalld.service服务 4、查看防火墙规则 5、查询、开放、关闭端口 Ori…

    Java 2023年6月7日
    083
  • Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法

    简介:Spring Data JPA 其实就是JDK方式(还有一种cglib的方式需要Class)的动态代理 (需要一个接口 有一大堆接口最上边的是Repository接口来自or…

    Java 2023年5月30日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球