werwew 发表于 2016-7-26 09:53:41

Memcached安装配置

一、Memcached介绍

[*]国外社区网站Live Journal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态Web站点性能。官方站点http://memcached.org

[*]基于C/S架构,协议简单

[*]基于Libevent的事件处理

[*]自主内存存储处理(Slab allowcation)

[*]数据过期方式:Lazy Expiration和LRU


二、Memcached流程图
减少对MySQL的读取次数


Slab allocation

[*]Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab.

[*]Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定。

[*]Slab是由多个Page组成的,Page按照指定大小切割成多个chunk



Growth factor

[*]memcached在启动时通过-f选项可以指定Growth Factor因子。该值控制chunk大小的差异。默认值为1.25

[*]通过memcached-tool查看指定memcached实例的不同slab状态,可以看到个ltem所占大小(chunk大小)差距为1.25

[*]命令:#memcached-tool 127.0.0.1:11211 display


Memcached数据过期方式

[*]Lazy Expiration

memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。

[*]LRU

memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,就是删除“最近很少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的使用角度来看,该模型十分理想。

三、Memcached安装
1.安装扩展源

1
2
3
4
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo   
yum clean all
yum makecache




#安装阿里yum源及扩展源

2.安装Memcached包及依赖包
yum install -y libevent memcached libmemcached nc

3.启动memcached服务

1
2
3
4
5
6
7
8
/etc/init.d/memcached start
ps aux | grep memcached
498      10290.00.0 330844   988 ?      Ssl10:43   0:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
netstat -tnlup| grep memcached
tcp      0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      1029/memcached      
tcp      0      0 :::11211                  :::*                        LISTEN      1029/memcached      
udp      0      0 0.0.0.0:11211               0.0.0.0:*                               1029/memcached      
udp      0      0 :::11211                  :::*





4.memcached相关配置
vim /etc/sysconfig/memcached
PORT="11211"            #端口
USER="memcached"       #用户
MAXCONN="1024"         
CACHESIZE="64"       #内存
OPTIONS=""

5.memcached启动参数
-d   启动一个守护进程
-m指定分配给memcached使用的内存数量,单位是MB
-u   指定memcached运行用户,如果当前为root,需要使用此参数
-l    指定监听的服务器IP地址
-p   指定memcached监听的端口,默认是11211
-c    指定最大运行的并发连接数,默认是1024
-P   设置memcached的PID文件

6.查看memcached运行状态
memcached-tool 127.0.0.1:11211 stats
echo stats | nc 127.0.0.1 11211
memstat --servers=127.0.0.1:11211

7.memcached基本操作
telnet 127.0.0.1 11211         #连接memcached

set key1 0 300 2   
12
STORED
get key1
VALUE key1 0 2
12
END

memcached-tool 127.0.0.1:11211 display   #查看chunk

set :表示按照相应的<key>存储该数据,没有的时候增加,有的覆盖
add :表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败
replace :表示按照相应的<key>替换数据,但是如果该<key>不存在则操作失败
<flags> 是一个16位无符号的整数
<exptime>过期的时间

8.PHP连接memcached
#找一台LNMP或LAMP,通过php自带的pecl安装程序
/usr/local/php/bin/pecl install memcache

也可以从源码安装

1
2
3
4
5
6
wgethttp://www.lishiming.net/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





安装完后会有类似这样的提示:
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/memcache.so'
把这个记住,然后vim /usr/local/php/etc/php.ini ,把
extension_dir = "./"
修改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/"
并添加一行
extension="memcache.so"

检验
# /usr/local/php/bin/php -m
测试php脚本
wget www.apelearn.com/study_v2/.memcache.txt

mv .memcache.txt   test.php
/usr/local/php/bin/php test.php      #不要忘记安装memcached

Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
    => aaa
    => bbb
    => ccc
    => ddd
)
<br>Get key1 value: <br>Get key2 value: <br>
OK

9.memcached实现session共享
vim /usr/local/php/etc/php.ini
#搜索Session关键字,添加下面两行
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"

或LAMP中
httpd.conf中对应的虚拟主机中添加:
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"

或LNMP中
php-fpm.conf对应的pool中添加:
php_value = memcache
php_value = "tcp://127.0.0.1:11211"



页: [1]
查看完整版本: Memcached安装配置