安装memcachedphp
[root@localhost ~]# yum install -y epel-release ; yum install -y libevent memcached libmemcachedhtml
启动程序nginx
[root@localhost ~]# /etc/init.d/memcached startweb
启动参数算法
[root@localhost ~]# cat /etc/sysconfig/memcachedapache
# 端口windows
PORT="11211"数组
# 用户服务器
USER="memcached"session
# 并发数
MAXCONN="1024"
# 内存
CACHESIZE="64"
# 选项
OPTIONS=""
# 启动参数说明,启动参数用在OPTIONS=""配置项,如OPTIONS="-l 127.0.0.1"
# -d 启动一个守护进程
# -m 分配给Memcached 使用的内存数量
# -l 监听IP
# -p 监听端口,默认是11211
# -c 最大运行并发数,默认是1024
# -P 大写P,设置保存Memcached 的PID文件
查看进程,查看启动参数
[root@localhost ~]# ps aux | grep memcached
498 1306 0.0 0.3 56276 820 ? Ssl 18:46 0:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid -l 127.0.0.1
查看监听端口
[root@localhost ~]# netstat -nlp | grep memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1551/memcached
udp 0 0 127.0.0.1:11211 0.0.0.0:* 1551/memcached
查看运行状态
[root@localhost ~]# memcached-tool 127.0.0.1:11211 stats
或
[root@localhost ~]# echo stats | nc 127.0.0.1 11211
或
[root@localhost ~]# memstat --servers=127.0.0.1:11211
其中nc和memstat须要安装工具
[root@localhost ~]# yum install -y nc libmemcached
登录,须要安装工具telnet
[root@localhost ~]# yum install -y telnet
[root@localhost ~]# telnet 127.0.0.1 11211
简单数据存/取过程
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# set 表示设置键属性
# key1 表示键名
# 0 表示标记,能够随意填
# 300 表示过时时间
# 3 表示值位数
set key1 0 300 3
ab1
# 输入完值后,加车,出现STORED表示存储完毕
STORED
# get key1 表示查看键key1的值
get key1
# 显示key1键属性,再显示key1键值
VALUE key1 0 3
ab1
# 当出现END表示结束
END
# 同上
set key2 219 5 7
# 上面设置值位数为7,输入的为6位,显示错误
asdqas
CLIENT_ERROR bad data chunk
ERROR
# 退出
quit
Connection closed by foreign host.
Mamcached 语法规则
<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
注:\r\n在windows下是Enter键。
a) <command name>能够是"set","add","replace"。
"set" 表示按照相应的<key>存储该数据,若是没有就增长,有就覆盖。
"add" 表示按照相应的<key>添加该数据,但若是该<key>已经存在,则会操做失败。
"replace" 表示按照相应的<key>替换数据,可是若是该<key>不存在则操做失败。
b)<key>客户端须要保存数据的key。
c) <flags> 是一个16位的无符号的整数(以十进制的方式表示)。
该标志将和须要存储的数据一块儿存储,并在客户端get数据时返回。
客户能够将此标志用作特殊用途,此标志对服务器来讲是不透明的。
d) <exptime> 过时时间。
若为0表示存储的数据永远不过时(但可被服务器算法:LRU等替换)。
若是非0(unix时间或者距离此时的秒数),当过时后,服务器能够保证用户得不到该数据(以服务器时间为标准)。
e) <bytes> 须要存储的字节数,当用户但愿存储空数据时<bytes>能够为0。
f) <data block> 须要存储的内容,输入完成后,最后客户端须要加上"\r\n"(直接点击Enter)做为"命令头"的结束标志。
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# 存储数据
set key1 1122 120 3
abc
STORED
# 读取数据
get key1
VALUE key1 1122 3
abc
END
# 替换数据
replace key1 3344 240 2
a1
STORED
get key1
VALUE key1 3344 2
a1
END
# 删除数据
delete key1
DELETED
php链接memcache
[root@localhost ~]# wget http://www.lishiming.net/data/p_w_upload/forum/memcache-2.2.3.tgz
[root@localhost ~]# tar zxvf memcache-2.2.3.tgz
[root@localhost ~]# cd memcache-2.2.3
[root@localhost memcache-2.2.3]# yum install m4 autoconf
[root@localhost memcache-2.2.3]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@localhost memcache-2.2.3]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost memcache-2.2.3]# make && make install
记住下面这行
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@localhost memcache-2.2.3]# vi /usr/local/php/etc/php.ini
; extension_dir = "./"
修改成
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
并添加行
extension="memcache.so"
检查有没有添加成功
[root@localhost memcache-2.2.3]# /usr/local/php/bin/php -m | grep memcache
下载测试文档
[root@localhost memcache-2.2.3]# curl www.apelearn.com/study_v2/.memcache.txt > 1.php
查看1.php内容
[root@localhost memcache-2.2.3]# cat 1.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();
?>
测试,若是结果以下,表示正常
[root@localhost memcache-2.2.3]# /usr/local/php/bin/php 1.php
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
[0] => aaa
[1] => bbb
[2] => ccc
[3] => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>
memcached 实现session 共享
===============================================================================
LNMP环境确认nginx有没有启用虚拟主机配置
[root@localhost memcache-2.2.3]# cat /usr/local/nginx/conf/nginx.conf | grep "include vhosts"
include vhosts/*.conf;
确认网站根目录
[root@localhost memcache-2.2.3]# cat /usr/local/nginx/conf/vhosts/myweb.conf | grep root
root /usr/local/nginx/html;
==============================================================================
LAMP环境确认apache有没有启用虚拟主机配置
[root@localhost memcache-2.2.3]# cat /usr/local/apache2/conf/httpd.conf | grep ^"Include conf"
Include conf/extra/httpd-vhosts.conf
确认网站根目录
[root@localhost memcache-2.2.3]# cat /usr/local/apache2/conf/extra/httpd-vhosts.conf | grep DocumentRoot
=====================================================================================
如下3个方法分别对应php、apache、nginx,请根据不一样的环境(LAMP或LNMP)选择其中一个方法配置,
1、通用。更改php配置文件
[root@localhost memcache-2.2.3]# vi /usr/local/php/etc/php.ini
把下面这行注释起来或者删掉
session.save_handler = files
添加如下两行
session.save_handler = "memcache"
127.0.0.1 为服务器IP,须要修改成实际环境中对应的IP
session.save_path = "tcp://127.0.0.1:11211"
2、LAMP环境。更改apache虚拟主机文件,在<VirtualHost *:80>和</VirtualHost>内加入内容
[root@localhost memcache-2.2.3]# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
3、LNMP环境。
[root@localhost memcache-2.2.3]# vi /usr/local/php/etc/php-fpm.conf
在对应的pool内添加
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://127.0.0.1:11211"
====================================================================================
LAMP环境写入测试文档
[root@localhost memcache-2.2.3]# vi /usr/local/apache2/htdocs/masker.net.cn/session.php
<?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();
?>
[root@localhost memcache-2.2.3]# /usr/local/apache2/bin/apachectl restart
==================================================================================
LNMP环境写入测试文档
[root@localhost memcache-2.2.3]# vi /usr/local/nginx/html/session.php
<?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();
?>
[root@localhost memcache-2.2.3]# /etc/init.d/nginx restart
=================================================================================
[root@localhost memcache-2.2.3]# curl localhost/session.php
1452682942<br><br>1452682942<br><br>7aloo42a8dohhv3udqo1uac0p6
或
[root@localhost memcache-2.2.3]# curl -x127.0.0.1:80 localhost/session.php
1452684165<br><br>1452684165<br><br>99qfsqo263jdmij0r879vqolc4
[root@localhost memcache-2.2.3]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get q4c8gd5tj2jm5qdsvdeojv3ho0
VALUE q4c8gd5tj2jm5qdsvdeojv3ho0 0 37
TEST|i:1452683072;TEST3|i:1452683072;
END
quit
Connection closed by foreign host.
暂时到这里。