一. memcached 是什么?
memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
memcached是一个高性能的、分布式内存对象缓存系统,应用广泛。 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。
Memcached 官方网站:http://www.danga.com/memcached
二. memcached 的安装:
注:memcached 用到了libevent这个库用于Socket的处理,所以还需要安装libevent.官网:http://www.monkey.org/~provos/libevent/
1. 先安装libevent:
[root@localhost software]#
[root@localhost libevent-1.4.11-stable]#
[root@localhost libevent-1.4.11-stable]#
[root@localhost libevent-1.4.11-stable]#
2. 测试libevent是否安装成功
[root@localhost libevent-1.4.11-stable]#
lrwxrwxrwx
-rwxr-xr-x
lrwxrwxrwx
-rwxr-xr-x
-rw-r--r--
lrwxrwxrwx
-rwxr-xr-x
-rw-r--r--
-rwxr-xr-x
lrwxrwxrwx
lrwxrwxrwx
-rwxr-xr-x
-rw-r--r--
-rwxr-xr-x
lrwxrwxrwx
-rwxr-xr-x
lrwxrwxrwx
安装OK。
3. 安装memcached,同时需要安装中指定libevent的安装位置
[root@localhost software]#
[root@localhost memcached-1.4.0]#
[root@localhost memcached-1.4.0]#
[root@localhost memcached-1.4.0]#
4. 测试是否成功安装memcached
[root@localhost memcached-1.4.0]#
-rwxr-xr-x
安装OK。
三. 如何启动 memcached 服务:
只需要启动一个 memcached 监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:
[root@localhost bin]#
-d:
-m:(max memory to use for items in megabytes (default: 64 MB))是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,
-u:(assume identity of <username> (only when run as root))是运行Memcache的用户,我这里是root,
-l:(interface to listen on)是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1,
-p:是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,
-c:选项是最大运行的并发连接数,默认是1024,这里设置了256,根据服务器的负载量来设定,
-P:(save PID in <file>, only used with -d option)是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid
注:也可以启动多个守护进程,不过端口不能重复。
四. 安装 Memcached 的PHP扩展:
在PHP中使用Memcached,有两种方式:
一种是安装PHP的memcached扩展。该扩展是用c写的,效率较高,需要在服务器上安装。
另外一种则是直接使用客户端的php-memcached-client类库。
下面是使用PECL中Memcache的专用扩展,因为毕竟是用C写的,效率高,而且安装部署起来也比较方便。
1. 在 http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。我下载的是:memcache-2.2.5.tgz 版本。
2. 安装 memcache
[root@localhost software]#
[root@localhost software]#
[root@localhost memcache-2.2.5]#
[root@localhost memcache-2.2.5]#
[root@localhost memcache-2.2.5]#
[root@localhost memcache-2.2.5]#
这步会有类似这样的提示:Installing shared extensions: /usr/local/php/modules
3. 把/etc/php.ini中的extension_dir = “./”修改为:extension_dir = "/usr/lib/php/modules"
4. 并添加: extension=memcache.so
也可执行以下shell命令,对php.ini文件的修改:
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"/nextension = "memcache.so"/n#' /usr/local/webserver/php/etc/php.ini
五. 安装C/C++ Memcached客户端库:libmemcached
下载:http://download.tangent.org/libmemcached-0.32.tar.gz
1. 安装 libmemcached
[root@localhost src]#
[root@localhost src]#
[root@localhost libmemcached-0.32]#
[root@localhost libmemcached-0.32]#
2. 检查安装结果
[root@localhost src]#
[root@localhost src]#
[root@localhost src]#
六. 应用:
1. 启动 memcache 服务
[root@localhost bin]#
2. 重启 Web 服务器
[root@localhost bin]#
3. 创建 demo 测试程序
<?php
//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
echo 'Memcache Version is:'.$mem->getVersion().'<br/>';
//保存数据
$mem->set('key1', 'This is first memcache demo', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: ".$val."<br/>"
//关闭连接
$mem->close();
?>
4. Memcached客户端与tokyotyrant DB操作访问
<?php
$memcache = new memcache();
$memcache->addServer('127.0.0.1:1978');
function microtime_float()
{
}
$time_start = microtime_float();
$data = 'abc123';
for($i = 0;$i <= 20000 ;$i++){
}
for($i = 0;$i <= 20000 ;$i++){
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $time;
$memcache->close();
?>
5. C/C++ 与 Memcached 结合代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
}
编译源代码:
[root@localhost html]#
[root@localhost html]#
Save key:key1 data:"This is c first value" success.
Fetch key:key1 data:This is c first value
Delete Key key1 success.
6. C/C++ 与 Memcached 分布式结合代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
}
编译源代码:
[root@localhost html]#
[root@localhost html]#
Save key:key1 data:"This is c first value" success.
Save key:key2 data:"This is c second value" success.
Save key:key3 data:"This is c third value" success.
Fetch key:key2 data:This is c second value
Fetch key:key3 data:This is c third value
Fetch key:key1 data:This is c first value
Delete key1 success
Delete key2 success
Delete key3 success
以上c/c++代码摘自:黑夜路人
7. 查看Memcache进程
[root@localhost html]#
root
root
8. 结束Memcache进程
[root@localhost html]#
转载:http://blog.sina.com.cn/s/blog_6d09b5750100vr2h.html