一、Memcached介绍
Memcached是一款开源的,高性能的分布式纯内存缓存服务软件,Mem就是内存的意思,cache缓存的意思,d是daemon的意思。Memcache项目诞生于2003年,Memcache服务分为客户端和服务端两部分,client/server。
客户端软件:Memcache-2.2.7.tar.gz
服务端软件:Memcached-1.4.13.tar.gz
二、Memcached 作用
1.Memcached 纯内存,用来缓存后端数据库的数据,博文,贴子,用户信息。
2.用来实现集群架构中的 "session" 会话共享存储
Memcachedb 内存加磁盘 sina开发,Memcached+BDB。用来缓存后端数据库的数据(博文,贴子,用户信息),可以直接做数据库用(微薄粉丝关注,统计),mysql补充。
Redis 内存加磁盘,作用同Memcachedb,支持主从复制,持久化等,数据类型更丰富,作为mysql的补充,redis。
Squid,nginx,varnish,ats web缓存,放在web前端。缓存静态图片,JS,CSS,HTML,视频。CDN就是利用这类软件做的分布式缓存。
三、Memcached工作原理
1.C/S架构,2000多行代码,C语言编写
2.基于libevent事件处理,异步IO模型(epoll事件模型)
3.数据以key/value键值对的形式存在
4.纯内存访问,重启数据丢失
5.多个集群节点互不联系(集群调度算法,一般用一致性HASH)
四、安装memcached服务端实战及测试
安装memcached服务端实战:
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
ls libevent-1.4.13-stable.tar.gz
tar xf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure
make
make install
tar xf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure
make
make install
启动:
memcached -d -c 10240 -p 11211 -m 16 -P /var/run/memcached.pid -u root
memcached -d -c 10240 -p 11212 -m 16 -P /var/run/memcached1.pid -u root -l 10.0.0.6
关闭:
pkill memcached
启动参数解释:
-p :指定端口
-m :指定memcached服务可以缓存数据的最大内存,默认为64M。
-u :指定运行memcached服务的用户
-d :作为守护进程在后台运行
-c :指定memcached服务的最大的并发连接数,默认是1024,按照服务器的并发访问量来设定。
-P :设置保存memcached的pid文件
-l :指定监听的服务器IP地址
-f : 调优因子
[root@LB-111-06 ~]# netstat -tunlp|grep mem #memcache服务端memcached
tcp 0 0 10.0.0.6:11211 0.0.0.0:* LISTEN 1594/memcached
udp 0 0 10.0.0.6:11211 0.0.0.0:* 1594/memcached测试服务端安装成果:
[root@LB-111-06 ~]# printf "set key008 0 0 10\r\noldboy0987\r\n"|nc 10.0.0.6 11211
STORED
[root@LB-111-06 ~]# printf "get key008\r\n"|nc 10.0.0.6 11211VALUE key008 0 10
oldboy0987
END
[root@LB-111-06 ~]# printf "delete key008\r\n"|nc 10.0.0.6 11211
DELETED
[root@LB-111-06 ~]# printf "get key008\r\n"|nc 10.0.0.6 11211
END
Memcached状态查看:
stats settings 可以查看一些memcached 设置 例如 线程数。。。
stats slabs 查看slabs 相关情况
stats items 查看Items 相关情况
stats sizes 查看存在的Item 个数和大小
stats cachedump 查看 key value
stats reset 清理统计数据安装memcache客户端
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar xf memcache-2.2.7.tgz #在web服务器上安装
cd memcache-2.2.7
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir
make
make install实现集群中的session共享存储:
diff php.ini php.ini
< session.save_handler = "memcache"
---
> session.save_handler = files
1490c1490
< session.save_path = "tcp://10.0.0.6:11211"
---
> ;session.save_path = "/tmp"
注意说明:
上面实例是在lamp/lnmp环境中通用的方法,另外一种方法是单独在lamp或者lnmp下实现,不用修改php.ini文件,直接修改下面对应的配置文件:
1)lamp
在 httpd.conf 对应的虚拟主机中添加(可以针对每个虚拟主机进行memcached共享session)
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"
2)lnmp
在 php-fpm.conf 对应的pool中添加
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"
3)、检测是否连接成功
[root@centos memcache-2.2.7]# /usr/local/php/bin/php -m |grep memcache #有memcache模块
memcache获取Memcached服务的状态信息并解读重点:
[root@LB-111-06 tools]# printf "stats\r\n"|nc 10.0.0.6 11211
STAT pid 5409
STAT uptime 97543
STAT time 1446485025
STAT version 1.4.24
STAT libevent 1.4.14b-stable
STAT pointer_size 64
STAT rusage_user 1.977699
STAT rusage_system 2.254657
STAT curr_connections 5
STAT total_connections 27
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 25
STAT cmd_set 19
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 23
STAT get_misses 2
STAT delete_misses 0
STAT delete_hits 0
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 2364
STAT bytes_written 991
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 319
STAT curr_items 4
STAT total_items 19
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
[root@LB-111-06 tools]# printf "stats\r\n"|nc 10.0.0.6 11211|grep get
STAT cmd_get 25 #请求25次
STAT get_hits 23 #成功获取(命中)23次
STAT get_misses 2 #丢失两次注:用memadmin工具也可以查询命中率!!@!!