Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法_php技巧

本文实例讲述了Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法。分享给大家供大家参考,具体如下:

1、首先安装memcache服务端:

sudo apt-get install memcached

安装完成后系统 自动启动了 memcached服务占用11211端口

如需重新配置11211端口的服务 需要关闭已开启的memcached服务

手动启动:

memcached -d -m 128 -p 11211 -u memcache

这里需要说明一下memcached服务的启动参数:

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

2、安装PHP Memecache 客户端

$ sudo apt-get install php5-memcache

重启web服务器

测试memcache代码:

<?php
$mem = new Memcache; //创建Memcache对象
$mem->connect("127.0.0.1", 11211); //连接Memcache服务器
$val = "这是一个Memcache的测试.";
$key = md5($val);
if(($k = $mem->get($key))){ //判断是否获取到指定的key
  echo 'from cache:'.$k;
} else {
  echo 'normal'; //这里我们在实际使用中就需要替换成查询数据库并创建缓存.
  $mem->set($key, $val, 0, 120); //增加插入一条缓存,缓存时间为120s
}

用memcache存储session

一般地, Session 是以文本文件形式存储在服务器端的。如果使用 Seesion,或者该 PHP 文件要调用 Session 变量,那么就必须在调用 Session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,PHP 自动完成 Session 文件的创建。其默认 Session 的存放路径是服务器的系统临时文件夹。

但是如果碰到大数据量的Sesstion的时候, 使用基于文件的Session存取瓶颈可能都是在磁盘IO操作上,现在利用Memcached来保存Session数据,直接通过内存的方式,效率自然能够提高不少。 在读写速度上会比 files 时快很多,而且在多个服务器需要共用 session 时会比较方便,将这些服务器都配置成使用同一组 memcached 服务器就可以,减少了额外的工作量。

其缺点是 session 数据都保存在 memory 中,一旦宕机,数据将会丢失。但对 session 数据来说并不是严重的问题。

如何用 memcached 来存储 session呢?以下是基本的配置步骤:

1. 安装 memcached (略过,不清楚的筒子可以查看前面一篇文章:http://www.jb51.net/article/85510.htm)
在 phpinfo 输出中的 "Registered save handlers" 会有 "files user sqlite"。

2. 修改配置文件,

①. 在 php.ini 中全局设置(* 需要重启服务器)

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

②. 或者某个目录下的 .htaccess :

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

③. 也可以在某个一个应用中:

ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

注:使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:

"tcp://host:port?persistent=1&weight=2,tcp://host2:port2" 。

3. 启动 memcached

复制代码 代码如下:

memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

4.测试 创建一个 session

<?php
//set_session.php
session_start();
if (!isset($_SESSION['admin'])) {
  $_SESSION['admin'] = 'wan';
}
print $_SESSION['admin'];
print "/n";
print session_id();
?>

5. 用 sessionid 去 memcached 里查询一下

<?php
//get_session.php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
var_dump($mem->get('0935216dbc0d721d629f89efb89affa6'));
?>

复制代码 代码如下:

[root@localhost html]# /usr/local/webserver/php/bin/php -f get_session.php

输出结果:

string(16) "admin|s:3:"wan";"

证明 session 正常工作。

再次深入 多域名网站利用MEMCACHE方式共享SESSION数据

通过了解 SESSION 的工作原理,我们可以发现,在默认情况下,各个服务器会各自分别对同一个客户端产生 SESSION ID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 30de1e9de3192ba6ce2992d27a1b6a0a,而 B 服务器生成的则是 c72665af28a8b14c0fe11afe3b59b51b。另外,PHP 的 SESSION 数据都是分别保存在本服务器的文件系统中。

确定了问题所在之后,就可以着手进行解决了。想要共享 SESSION 数据,那就必须实现两个目标:一个是各个服务器对同一个客户端产生的 SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递,也就是说各个服务器必须可以读取同一个名为 PHPSESSID 的 COOKIE;另一个是 SESSION 数据的存储方式/位置必须保证各个服务器都能够访问到。简单地说就是多服务器共享客户端的 SESSION ID,同时还必须共享服务器端的 SESSION 数据。

第一个目标的实现其实很简单,只需要对 COOKIE 的域(domain)进行特殊地设置即可,默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所设置的 COOKIE 是不能相互访问的,如 www.aaa.com 的服务器是不能读写 www.bbb.com 服务器设置的 COOKIE 的。这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如:tieba.xiaoyuan.com 和 www.xiaoyuan.com 都属于域 .xiaoyuan.com,那么我们就可以设置 COOKIE 的域为 .xiaoyuan.com,这样 tieba.xiaoyuan.com、www.xiaoyuan.com 等等都可以访问此 COOKIE。PHP 代码中的设置方法如下:

<?php
ini_set('session.cookie_domain', 'xiaoyuan.com');
?>

这样各个服务器共享同一客户端 SESSION ID 的目的就达到了。

于是 可以在 a.domain.com 下

session.php

<?php
ini_set('session.cookie_domain', 'domain.com');
session_start();
if (!isset($_SESSION['admin'])) {
  $_SESSION['admin'] = 'wan';
}
print $_SESSION['admin'];
print "\n";
print session_id();

在b.domain.com下

session2.php

<?php
ini_set('session.cookie_domain', 'domain.com');
session_start();
echo $_SESSION['admin'];

希望本文所述对大家Ubuntu平台上的php程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 安装
, ubuntu
, server
, memcache
, 11.04
存储session
memcache存储session、php session memcache、memcache session共享、memcache session、memcache同步session,以便于您获取更多的相关知识。

时间: 2024-07-29 14:00:58

Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法_php技巧的相关文章

Ubuntu Server 16.04安装MySQL设置远程访问出现问题的完美解决方案(error:10061)_Linux

说明: 一个朋友在使用Ubuntu Server 16.04安装MySQL,设置远程访问的时候出现了问题,请我帮忙.但是,我也没有使用过Ubuntu安装MySQL,于是乎搜索了很多技术文件,比着葫芦画瓢.但是,由于MySQL版本的差异,导致在安装设置的过程中出现了一些问题:就是不能远程访问. 一.安装mysql 1. 安装需要使用root账号,如果不会设置root账号的请参考Linux公社的其他文章.安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了. sudo apt-g

Ubuntu Server 12.04 安装mysql 5.6.10学习笔记

首先,下载二进制版本的mysql包: http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz 因为Ubuntu Server上 wget比较慢,所以我是直接在windows用迅雷下载好,然后WinSCP上传到服务器的,看各自喜好了. 上正题. 包放在~/Download目录下,全部安装命令如下: 1.解压tar.gz  代码如下 复制代码 tar –xzf mysql-5.6.10-li

Ubuntu Server 11.10安装配置lamp(Apache+MySQL+PHP)_Linux

准备篇: 1.配置防火墙,开启80端口.3306端口 说明:Ubuntu默认安装是没有开启任何防火墙的,为了服务器的安全,建议大家安装启用防火墙设置,这里推荐使用iptables防火墙. whereis iptables #查看系统是否安装防火墙 iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz #表示已经安装iptables apt-get install iptables #如果默认没

安装ImageMagick出现error while loading shared libraries的解决方法_php技巧

本文实例讲述了安装安装ImageMagick出现error while loading shared libraries的解决方法.分享给大家供大家参考.具体解决方法如下: 运行程序时,如遇到像下列这种错误: ./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory 那就表示系统不知道xxx.so 放在哪个目录下. 这个时候就要

php安装php_rar扩展实现rar文件读取和解压的方法_php技巧

本文实例讲述了php安装php_rar扩展实现rar文件读取和解压的方法.分享给大家供大家参考,具体如下: PHP Rar Archiving 模块 (php_rar) 是一个读取和解压rar文件的模块,但不提供RAR压缩(打包)的功能. 1.首先要到PECL的RAR页面下载DLL. 根据自己的情况选择下载对应版本的DLL. PHP版本要求:php_rar模块适用于php 5.2及以上, 不过对于windows系统,似乎只有php5.3 / 5.4对应的DLL下载. 2.下载到的是个zip包,将

Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法_php技巧

对比下面两个脚本的速度: Windows 7 用 localhost 连接本地 MySQL,速度会很慢. Windows 7 用 127.0.0.1 连接本地 MySQL,速度则是正常的. my.ini里配置了 bind-address=127.0.0.1  用localhost连接本地MySQL: 速度慢 <?php $start = microtime(true); $mysqli = new mysqli('127.0.0.1', 'root', '', 'mysql'); //连接耗时仅

Ubuntu Server 16.04 LTS 上安装 LAMP图解教程_Linux

LAMP 方案是一系列自由和开源软件的集合,包含了 Linux.Web 服务器 (Apache). 数据库服务器 (MySQL / MariaDB) 和 PHP (脚本语言).LAMP 是那些需要安装和构建动态网页应用的基础平台,比如WordPress.Joomla.OpenCart 和 Drupal. 在这篇文章中,我将描述如何在 Ubuntu Server 16.04 LTS 上安装 LAMP,众所周知 Ubuntu 是一个基于 Linux 的操作系统,因此它构成了 LAMP 的第一个部分,

Ubuntu server 10.04下安装图形界面

以下在Ubuntu server 10.04测试完成. 1.连接网络,你一定要确保网络通畅,如果你和我一样使用Wireless,那先找根网线插上,因为下面的安装都要通过网络下载组件的. 2.进入图形界面的命令是startX,敲击后会有安装xinit的提示. sudo apt-get install xinit 安装完,终端由黑色界面变成白底黑字.出现X型的鼠标指针. 3.安装环境管理器 如果你喜欢 GNOME,使用sudo apt-get install gdm KDE和Xface用户分别改为

在 Ubuntu Server 16.04 LTS 上安装 LAMP

LAMP 方案是一系列自由和开源软件的集合,包含了 Linux.Web 服务器 (Apache). 数据库服务器 (MySQL / MariaDB) 和 PHP (脚本语言).LAMP 是那些需要安装和构建动态网页应用的基础平台,比如WordPress.Joomla.OpenCart 和 Drupal. 在这篇文章中,我将描述如何在 Ubuntu Server 16.04 LTS 上安装 LAMP,众所周知 Ubuntu 是一个基于 Linux 的操作系统,因此它构成了 LAMP 的第一个部分,