您的位置:首页 > 数据库 > Memcache

Memcached 分布式缓存系统部署与调试 推荐

2012-01-07 21:08 405 查看
Memcache 分布式缓存系统部署与调试

工作机制:通过在内存中开辟一块区域来维持一个大的hash表来加快页面访问速度,和数据库是独立的;目前主要用来缓存数据库的数据;存放在内存的数据通过LRU算法进行淘汰出内存;同时可以通过删除和设置失效时间来淘汰存放在内存的数据。



一 memcache 安装


1 memcached 服务器安装

1.1 memcached 官方网站 http://memcached.org/
目前最新稳定版本 memcached-1.4.10.tar.gz

1.2 memcached 依赖libevent库,在安装memcached之前检查下系统是否已安装libevent库,如果没有则需要先安装 libevent

libevent 官方网站 http://libevent.org/
目前最新稳定版本 libevent-2.0.16-stable

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制

1.3 安装 libevent 与 memcached

# tar zxvf libevent-2.0.16-stable.tar.gz
# cd libevent-2.0.16-stable
# ./configure --prefix=/usr/local/libevent
# make && make install

# tar zxvf memcached-1.4.10.tar.gz
# cd memcached-1.4.10
# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
# make && make install


1.4 简单测试

# /usr/local/memcached/bin/memcached -u root -d -m 200 -l 127.0.0.1 -p 11211 -P /var/run/memcached.pid
# ps aux | grep memcache | grep -v 'grep'
root      8979  0.0  0.2  64732  1072 ?        Ssl  12:03   0:00 /usr/local/memcached/bin/memcached -u root -d -m 200 -l 127.0.0.1 -p 11211 -P /var/run/memcached.pid
# lsof -i :11211
COMMAND    PID USER   FD   TYPE DEVICE SIZE NODE NAME
memcached 8999 root   26u  IPv4  12244       TCP one.t.com:11211 (LISTEN)
memcached 8999 root   27u  IPv4  12245       UDP one.t.com:11211


2 memcache 客户端安装

2.1 php memcache 客户端
http://pecl.php.net/package/memcache
目前最新稳定版本 memcache-2.2.6.tgz

# tar zxvf memcache-2.2.6.tgz
# cd memcache-2.2.6
# /usr/local/php/bin/phpize
# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config
# make && make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
# vim /etc/php.ini
然后修改php.ini
extension_dir = "./"
修改为
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
并添加一行
extension=memcache.so
# /etc/init.d/php-fpm restart


#memcache.php 测试文件

<?
$memcache = new Memcache; //创建一个memcache对象
$memcache->connect('localhost', 11211) or die ("Could not connect"); //连接Memcached服务器
$memcache->set('key', 'test'); //设置一个变量到内存中,名称是key 值是test
$get_value = $memcache->get('key'); //从内存中取出key的值
echo $get_value;
?>
输出test,表示搭建成功 !

#php调用memcache





2.2 .net memcache 客户端
http://blog.csdn.net/xiaoyong322/article/details/6544027 http://code.google.com/p/memcached/wiki/Clients
二 memcache 安装shell脚本与安装包

1 memcached 安装脚本

2 memcached 服务脚本

3 memcached 安装包



三 memcached命令参数说明


/usr/local/memcached/bin/memcached  -d -u root -m 6144 -l 10.10.10.1 -p 11211 -c 100000 -P /var/run/memcached.pid
-p 监听的端口
-l 连接的IP地址, 默认所有ip地址
-d start 启动memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB;默认64MB
-p 监听 TCP port number;默认 11211
-c 最大同时连接数,默认是1024
-P memcache PID文件, 需要使用 -d 参数
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助




四 memcached 服务器调试


telnet到memcache服务器,如:telnet 10.0.1.252 11211

stats 查看基本信息

stats items 可以看到出现 很多的items行

stats cachedump 1 0(3是items后面的数字,0表示显示所有的)

get key(key 为 item后面的字符串即键)

#memcached server 1
$ telnet 10.10.10.1 11211
Trying 10.10.10.1...
Connected to 10.10.10.1.
Escape character is '^]'.
stats
STAT pid 1750
STAT uptime 106479
STAT time 1325943604
STAT version 1.4.10
STAT libevent 2.0.16-stable
STAT pointer_size 64
STAT rusage_user 42.595524
STAT rusage_system 140.332666
STAT curr_connections 1531
STAT total_connections 1057087
STAT connection_structures 1874
STAT reserved_fds 20
STAT cmd_get 33790491
STAT cmd_set 1557865
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 30863261
STAT get_misses 2927230
STAT delete_misses 157
STAT delete_hits 186
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 8488077314
STAT bytes_written 173942242454
STAT limit_maxbytes 6442450944
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 9
STAT hash_power_level 19
STAT hash_bytes 4194304
STAT hash_is_expanding 0
STAT expired_unfetched 31545
STAT evicted_unfetched 0
STAT bytes 1309377867
STAT curr_items 404976
STAT total_items 1557865
STAT evictions 0
STAT reclaimed 47812

#memcached server 2
# telnet 10.0.1.252 11211
Trying 10.0.1.252...
Connected to 10.0.1.252 (10.0.1.252).
Escape character is '^]'.
stats items
STAT items:1:number 1
STAT items:1:age 10975
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END
stats cachedump 1 0
ITEM key [4 b; 1325927086 s]
END
get key
VALUE key 0 4
test
END

扩展

Memcache协议中文版

结束

memcached 节省了磁盘读写、数据库连接、Sql解析资源;它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能。在大型系统中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力。

memcached 也经常作为服务器之间数据共享的存储媒介,例如在web集群下session可以保存在memcached中,被多个应用共享。

memcached 是将数据放在内存中,不是持久化存储,一旦服务器重启,数据将会丢失。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息