Memcache入门知识
Memcache适合做缓存,是一款管理内存的很小的软件,实现对内存数据的管理,一般我们用memcache存储临时数据,因为内存不能储存永久化的数据,内存里面的数据,断电就消失了。
memcache可以存储任何的数据类型,数值,字符串,数值以及音频、视频等。
memcache主要是做数据库和客户端的中间层来使用,memcache做缓存能大大提高数据的访问速度,减少客户端对数据库的请求。因为大部分时间将从memcache里面直接获取我们存储的数据。memcache可以使用多台服务器做分布式存储,这样实现多台服务器的高效工作。
memcache安装方法:
1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3
还不错,都安装上了。
4.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,
5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug
启动Memcached服务:
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.141.64 -p 12000 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
常见问题:
1.如果启动Memcached服务的时候遇到了
/usr/local/bin/memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared object file: No such file or directory;
解决方案:
[root@localhost bin]# ln -s /usr/lib/libevent-1.2.so.1 /usr/lib64/libevent-1.2.so.1
[root@localhost bin]# /usr/local/bin/memcached -d -m 100 -u root -p 12000 -c 1000 -P /tmp/memcached.pid
[root@localhost bin]# ps -aux
可以看到启动的Memcached服务了
安装php操作memcached服务器的扩展库:
php连接memcached缓存服务器的客户端有两个,一个是memcache是比较底层的开发库,memcached是比较新的开发库,php安装这两个扩展中的任意一个后就可以在编写php代码时使用的memcached缓存数据,达到缓存php执行的结果
1 安装memcache扩展
->下载memcache源码包(下载地址:http://pecl.php.net/package/memcache)
wget http://pecl.php.net/get/memcache-3.0.8.tgz
->解压缩
tar zxvf memcache-3.0.8.tgz
cd memcache-3.0.8
./configure --enable-memcache=/usr/local/memcached --with-php-config=/usr/local/php5/bin/php-config --with-apxs2=/usr/sbin/apxs
make
make install
->make install之后提示
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/
->然后修改php.ini,
把 extension_dir = "./" 修改为 extension_dir = "/usr/local/php5/lib/php/extensions/"
->然后添加一行
extension="no-debug-non-zts-20100525/memcache.so"
2 安装memcached扩展(略)
Memcached客户端命令
stats:服务器运行状态信息
add:添加键值对到memcache
set:添加键值对,如果键已经存在就修改
格式:set <键> <标记> <有效期> <数据长度> <值>
标记--没什么实际用处,随便写个数字就行
有效期--单位秒,0代表永久有效
数据长度:在客户端写命令要指定数据长度,在php扩展里面不用指定,在客户端存储的数据必须跟指定长度相等
get:获取数据,格式: get <键>
delete:删除指定数据 格式:delete <键>
flush_all:清空所有数据
Memcached错误提示命令
ERROR:普通错误,比如指令错误
CLIENT_ERROR:客户端错误
SERVER——ERROR:服务器端错误
PHP使用memcache扩展库操作memcached
//创建实例 $m = new memcache; //连接memcached服务器 $m->connect('主机IP','端口号'); //增加一个条目到缓存服务器 $m->add('key','value',MEMCACHE_COMPRESSED,$expire) 说明:$expire -- 有效期单位是秒,设置为0表示永远不过期,但是秒数不超过30天,如果超过30天,使用time()+超过30天的秒数 MEMCACHE_COMPRESSED -- 指定压缩 //删除一个条目 $m->delete('key',$timeout=0); 说明:第二个参数是指定多久后删除,不填默认是立即删除 //清洗(删除)已经存储的所有的元素 $m->flush(); //返回对应key的值,如果不存在返回false $m->get('key'); 说明:key可以是单个key或key数组 //存储一个key-value到服务器,如果key存在就修改 $m->set($key,$value,MEMCACHE_COMPRESSED,$expire); 说明:资源类型变量(比如文件或连接)不能被存储在缓存中,因为它们在序列化状态不能被完整描述 //关闭连接 $m->close();
memcache分布式存取
memcache分布式存取的原理是同时连接多台memcached服务器,让数据均匀的分布到每台服务器,从而提高memcache缓存的存取效率。memcached会把数据分派到每台服务器里面,我们不需要管具体怎么分派和读取数据,memcached自动帮我们完成。memcache的分布式存取很方便,只需要一个把服务器添加到连接池里面就完成了。
使用php的memcache扩展库来添加服务器到连接池里面
//向连接池里面添加一台或者多台服务器,可以通过参数来指定每台服务器的权重
$m->addServer('IP',port);
$m->addServer('IP2',port2);
...
memcache安全防护
memcache没有自带用户验证功能,这样每个用户都可以直接连接memcached服务器,完全的暴露数据是不安全的,我们需要做好安全防护措施,一般用两种方式来防护:1 启动memcached服务器的时候绑定IP,指定的IP才可以访问
2 设置防火墙