Ubuntu server 11.04安装memcache及php使用memcache来存储
本文实例讲述了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 s|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 (略过,不清楚的筒子可以查看前面一篇文章)
在 phpinfo 输出中的 "Registered save handlers" 会有 "files user sqlite"。
2. 修改配置文件,
①. 在 php.ini 中全局设置( 需要重启服务器)
session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211"
②. 或者某个目录下的 .htaess :
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
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')); ?>
输出结果
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 是不能相互访问的,如 .aaa. 的服务器是不能读写 .bbb. 服务器设置的 COOKIE 的。这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如tieba.xiaoyuan. 和 .xiaoyuan. 都属于域 .xiaoyuan.,那么我们就可以设置 COOKIE 的域为 .xiaoyuan.,这样 tieba.xiaoyuan.、.xiaoyuan. 等等都可以访问此 COOKIE。PHP 代码中的设置方法如下
<?php ini_set('session.cookie_domain', 'xiaoyuan.'); ?>
这样各个服务器共享同一客户端 SESSION ID 的目的就达到了。
于是 可以在 a.domain. 下
session.php
<?php ini_set('session.cookie_domain', 'domain.'); session_start(); if (!isset($_SESSION['admin'])) { $_SESSION['admin'] = 'wan'; } print $_SESSION['admin']; print "\n"; print session_id();
在b.domain.下
session2.php
<?php ini_set('session.cookie_domain', 'domain.'); session_start(); echo $_SESSION['admin'];
希望本文所述对大家Ubuntu平台上的php程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程