memcache简单描述
memcache不适合场景:
(1)缓存对象的大小大于1MB
(2)key的长度大于250字符
过期时间最长可以达到30天
memcached编译安装
编译安装libevent
wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
tar xzvf libevent-2.0.22-stable.tar.gz
./configure --prefix=/opt/local/libevent
make && make install
编译安装memcache
tar zxvf memcached-1.4.30.tar.gz
./configure --prefix=/opt/local/memcache --with-libevent=/opt/local/libevent
make && make install
编译安装memcached扩展
tar xzvf memcached-2.2.0.tgz
/opt/local/php/bin/phpize
./configure --enable-memcached --with-php-config=/opt/local/php/bin/php-config --with-libmemcached-dir=/opt/local/libmemcached --disable-memcached-sasl
make && make install
php使用类
<?php
/**
* Pengcz_Cache
*
* @version $Id$
* @copyright
*/
/**
* 缓存类
*
*/
class Pengcz_Cache {
var $_memcached;
var $_app_key;
public function Seedit_Cache($app_key) {
$this->_memcached = new Memcached();
$this->_memcached->addServer(MEMCACHE_HOST, MEMCACHE_PORT);
$this->_app_key = strtolower($app_key);
}
public function set($key,$value,$expiration=0) {
$key = $this->_app_key . "_" . substr(md5($key),8,16);
$this->_memcached->set($key,$value,$expiration);
}
public function get($key) {
$key = $this->_app_key . "_" . substr(md5($key),8,16);
$data = $this->_memcached->get($key);
return $data;
}
public function delete($key) {
$key = $this->_app_key . "_" . substr(md5($key),8,16);
$data = $this->_memcached->delete($key);
return $data;
}
/*public function flush() {
return $this->_memcached->flush();
}*/
}
memcached FAQ
memcache安全:
memcache通过客户端直接连接,没有验证过程
memcache都是以root权限运行的
方法:
(1)内网访问,如果有两块网卡,web服务器通过内网网卡访问memcache,启动memcache的时候就监听内网的ip和端口
memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
(2)设置防火墙,只开放固定的ip地址(只开放192.168.0.2)
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
FAQ
1.为什么会有Memcache和memcached两种名称
Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名
php有两个扩展
2.如何遍历memcahe的key值
php 使用getExtendedStats方法
3.使用$memcache->addServer 而不是 $memcache->connect 去连接 Memcached 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的
4.实现memcache的主从工具
repcached
5.监控memcache的工具
[memadmin](http://www.junopen.com/memadmin/)
6.MemcacheDB=Memcached+BerkeleyDB组成的轻量的持久数据库
7.memcache分布式算法
分布式算法采用基于server节点数的取余法(增加和减少服务器会对之前的缓存有影响)
consistent hash算法,直接对服务器的节点进行hash,然后散布在0~2^32的圆周上,同样对于数据的key也采用同样的hash进行散布
8.Memcached没有持久性,数据采用LRU算法