Memcached
Memcached
一、简介
memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
memcached作为高速运行的分布式缓存服务器,具有以下的特点。
· 基于c/s架构,协议简单
· 基于libevent的事件处理
· 内置内存存储方式(slab allowcation)
· memcached不互相通信的分布式
- 数据过期方式:Lazy Expiration 和 LRU
二、Memcached安装
安装必要memcached libmemcached libevent
[root@memcached ~]# yum install -y memcached libmemcached libevent
开启memcached服务
[root@memcached ~]# systemctl start memcached
三、命令行
[root@memcached ~]# yum install -y telnet
[root@memcached ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set key2 0 30 2
ab
STORED
get key2
VALUE key2 0 2
ab
END
四、PHP连接Memcached
安装php的memcache扩展
[root@memcached ~]# cd /usr/local/src/
[root@memcached ~]# wget https://pecl.php.net/get/memcache-2.2.3.tgz
[root@memcached ~]# tar zxf memcache-2.2.3.tgz
cd memcache-2.2.3
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
修改php.ini添加一行
[root@memcached memcache-2.2.3]# vi /usr/local/php/etc/php.ini
extension="memcache.so"
检查
[root@memcached memcache-2.2.3]# /usr/local/php/bin/php -m |grep memcache
执行脚本
[root@memcached ~]# vi 1.php
test success
[root@memcached ~]# /usr/local/php/bin/php 1.php start
五、Memcached中存储session
本实例是在lamp/lnmp环境下实现
编辑php.ini添加两行
session.save_handler = memcache
session.save_path = "tcp://10.24.197.179"
或者httpd.conf中对应的虚拟主机中添加
php_value session.save_handler "memcache"
php_value session.save_path "tcp://10.24.197.179"
或者php-fpm.conf对应的pool中添加
php_value[session.save_handler] = memcache
php_value[session.save_path] = " tcp://10.24.197.179 "
执行
[root@memcached ~]# vi /usr/local/apache2.4/htdocs/session.php
<?php
session_start();
$_SESSION['name']='test';
echo session_id()."<br/>";
echo $_SESSION['name'];
?>
[root@memcached htdocs]# /usr/local/php/bin/php session.php start
s3p3qpekcvrft9245umcil4v80<br/>test
telnet 127.0.0.1 11211
get s3p3qpekcvrft9245umcil4v80
VALUE s3p3qpekcvrft9245umcil4v80 0 16
name|s:4:"test";
END
注:如果没出现尝试curl localhost/session.php