Memcached实现Session共享

一、memcached安装

1. memcached安装和启动、查看进程

安装扩展源 yum install -y epel-release

安装软件、组件、工具包 yum install -y libevent memcached libmemcached

启动 /etc/init.d/memcached start

进程 ps aux |grep memcached

解释:

-d  启动一个守护进程

-p  监听的端口,默认11211

-u  运行memcached用户

-m 内存大小,单位MB

-c  并发连接数,默认1024

-P pid文件

-l  监听的服务器IP地址

2. 编辑配置文件/etc/sysconfig/memcached

说明:配置文件中添加监听地址 -l 127.0.0.1

3. 查看memcached运行状态

1) 使用memcached自带命令查看,一般优良的memcache,cmd_hits/cmd_get命中率大于80%

命令 memcached-tool 127.0.0.1:11211 stats

2) 使用nc工具命令查看

说明:需yum install -y nc

命令 echo status |nc 127.0.0.1 11211

3) 使用libmemcached工具的命令查看

命令 memstat --servers=127.0.0.1:11211

二、memcached操作

Memcached需在网站代码里指定,一般由开发人员操作,也可在测试和查看数据时,执行这些操作,一般用于php访问和存储

1. memcached登录

telenet方式:Telnet 127.0.0.1 11211

2. memcached语法规则

格式:

<command name><key><flags><exptime><bytes> \r\n <data block> \r\n

说明:

1) \r\n在Windows下是Enter键

2) <command name>可以是set(已存在则覆盖)、add(已存在则失败)、replace(不存在则失败)

3) <key>

4) <flags> 16位无符号十进制整数

5) <exptime> 0表示永不过期,但可以被服务器算法LRU替换

6) <bytes> 存储的字节数,空数据设为0

7) <data block> 存储的数据

3. 操作数据

1) 存入和查看一条数据

说明:键名为1;1表示键标记;80为过期时间;2为字节大小;回车输入2个字节的数据

2)替换一条数据

3) 删除一条数据

4. 查看chunk值

命令:memcached-tool 127.0.0.1:11211 display


三、memcached连接实现共享

Memcache作为php的一个扩展模块, 数据存到了memcached里面后,php通过memcache模块去和memcached服务交互

1. 下载和安装扩展工具memcache模块

说明:源码编译时,需用到/usr/local/php/bin/phpize工具生成configure文件,如没有需yum install php-devel

命令 wget http://www.apelearn.com/bbs/data/attachment/forum/memcache-2.2.3.tgz

tar -zxf memcache-2.2.3.tgz

cd memcache-2.2.3

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make;make install

2. 编辑php配置文件/usr/local/php/etc/php.ini,指定扩展模块的目录extension_dir(默认)和模块文件,并重启查看是否加载/usr/local/php/bin/php -m

3. 编辑测试脚本1.php,并用/usr/local/php/bin/php测试与php的解析

<?php
//连接Memcache Memcache
$mem = new Memcache;
$mem->connect("localhost", 11211);

//保存数据
$mem->set(‘key1‘, ‘This is first value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo "Get key1 value: " . $val ."<br>";

//替换数据
$mem->replace(‘key1‘, ‘This is replace value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo "Get key1 value: " . $val . "<br>";

//保存数组数据
$arr = array(‘aaa‘, ‘bbb‘, ‘ccc‘, ‘ddd‘);
$mem->set(‘key2‘, $arr, 0, 60);
$val2 = $mem->get(‘key2‘);
echo "Get key2 value: ";
print_r($val2);
echo "<br>";

//删除数据
$mem->delete(‘key1‘);
$val = $mem->get(‘key1‘);
echo "Get key1 value: " . $val . "<br>";

//清除所有数据
$mem->flush();
$val2 = $mem->get(‘key2‘);
echo "Get key2 value: ";
print_r($val2);
echo "<br>";

//关闭连接
$mem->close();
?>

4. memcached实现session共享(lamp/lnmp环境下实现方式有多种)

  • /usr/local/php/etc/php.ini文件中添加

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

  • httpd.conf(apahce)虚拟主机配置文件添加

php_value session.save_hander "memcache"

php_value session.save_path "tcp://127.0.0.1:11211"

  • php-fpm.conf(nginx)对应的pool中添加

php_value[session.save_handler]=memcache

php_value[session.save_path]="tcp:127.0.0.1:11211"

a. 编辑php配置文件vim /usr/local/php/etc/php.ini,填写session保存方式路径

说明:如memcached服务器安装的远程机器上,在监听远程机器的IP

内容:

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

b. 编辑php测试脚本session.php,移至网站目录下/data/www/

内容:

<?php
session_start();
if (!isset($_SESSION[ ‘TEST‘ ])) {
$_SESSION[ ‘TEST‘ ] = time();
}
$_SESSION[ ‘TEST3‘ ] = time();
print $_SESSION[ ‘TEST‘ ];
print "<br><br>";
print $_SESSION[ ‘TEST3‘ ];
print "<br><br>";
print session_id();
?>

c. 用curl或者浏览器访问session.php,获取返回的session值

命令 curl -x127.0.0.1:80 172.16.111.195/session.php

d. telnet登录memcached服务器,查看本地保存的session信息与curl获取的一致



5. 通过phpinfo查看session相关配置

时间: 2024-10-13 15:01:09

Memcached实现Session共享的相关文章

Tomcat基于MSM+Memcached实现Session共享

前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享. 相关介绍 MSM MSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用Memcached存取Session,以实现高可用. 工作原理 Sticky Session(黏性) 模式

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

【Tomcat】Tomcat + Memcached 实现session共享

概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解决方案 环境 操作系统:Linux( centOS 6..5 版) 软件:Tomcat7    Memcached 实现原理 Tomcat + Memcached 实现session共享流程图 配置 安装Tomcat 2个和Memcached 1个,参考[Linux]Tomcat安装及一个服务器配置

nginx+tomcat8+memcached实现session 共享

操作环境: iP地址 角色 安装软件 10.43.2.135 nginx方向代理 memcached服务器 nginx   memcached 10.43.2.134 tomcat服务器 2个tomcat(端口分别为8080 8081) 实验中使用的软件如下: 实现思路: 第一步:针对10.43.2.134的操作 1.在10.43.2.134上安装2个tomcat 2.在$CATALINA/webapps/ROOT/下建立测试页面t.jsp 3.分别启动2个tomcat服务 4.打开http:/

nginx+tomcat8+memcached实现session共享具体操作

本次试验用到的软件包的版本如下: 一.针对10.43.2.134的操作 1.安装jdk环境 tar zxf jdk-8u5-linux-x64.tar.gz mkdir /usr/java mv jdk1.8.0_05/ /usr/java/ 编辑/etc/profile 在文档的末尾追加如下5行内容: JAVA_HOME=/usr/java/jdk1.8.0_05 JRE_HOME=/usr/java/jdk1.8.0_05/jre PATH=$PATH:$JAVA_HOME/bin:$JRE

tomcat篇之结合apache+tomcat+memcached做session共享

tomcat1:192.168.1.155 tomcat2:192.168.1.11 apache:192.168.1.155 前端代理apache设置,参考前面的tomcat文章(基于mod_proxy和mod_jk模块) 这里不再赘述,直接贴配置文件: cd /etc/httpd/conf.d [[email protected] conf.d]# cat mod_jk.conf LoadModule  jk_module  modules/mod_jk.so JkWorkersFile/e

NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

TOMCAT7.0+ NGINX + MEMCACHED + memcached-session-manager 实现SESSION共享 http://blog.csdn.net/nerissa/article/details/18961361  ; //参考博客 http://pan.baidu.com/s/1pJlZ0mB    //相关包下载,含lib所需的jar包 环境:centOS 6.5(64位) .jdk8_8u5 .tomcat7.054.nginx1.47.libevent-2

Tomcat+Memcached实现Session共享

在先前的例子中,我用Tomcat官方提供的Session复制方式实现Tomcat集群Session共享.今天,我用另一种方式Memcached-Session-Manager来实现Session共享.话不多说,上实例. Memcached-Session-Manager将Session序列化到Memcache中,序列化的组件有很多,比如: msm-kryo-serializer.msm-javolution-serializer等,这里使用msm-javolution-serializer,使用

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配