Memcached是Danga Interactive公司开发的分布式内存对象缓存系统,目前以成为Web服务器提高可用性的一个重要因素。
很多Web应用程序查询存放在RDBMS数据库的数据,并返回给客户端(浏览器)。但是当我们的RDBMS数据库的数据量过大或者访问集中时,经常会导致RDBMS负荷过高而影响整个服务的响应时间。
Memcached是高性能分布式内存对象缓存系统,通常会把查询数据库的结果暂时缓存到内存,这么做的好处是同样的查询无需再次访问数据库直接从内存获取结果,不断降低了数据库的访问次数并且提高整个服务的响应时间。
确认环境
安装Memcached
yum安装Memcached时,会安装memcached和libevent。
# yum install memcached
使用php命令查看,php是否可使用Memcached。
# php -i | grep memcache /etc/php.d/memcached.ini, memcache memcache support => enabled memcache.allow_failover => 1 => 1 memcache.chunk_size => 8192 => 8192 memcache.default_port => 11211 => 11211 memcache.default_timeout_ms => 1000 => 1000 memcache.hash_function => crc32 => crc32 memcache.hash_strategy => standard => standard memcache.max_failover_attempts => 20 => 20 Registered save handlers => files user sqlite memcache
启动Memcached
# systemctl start memcached
Memcached配置文件
Memcached的默认配置文件是,/etc/sysconfig/memcached。
# cat /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS=""
选项名 | 默认值 | 内容 |
---|---|---|
PORT | 11211 | Memcached端口 |
USER | memcached | 执行Memcached的用户 |
MAXCONN | 1024 | 最大同时连接数 |
CACHESIZE | 32MB | 指定Memcached使用的内存容量(单位MB) ※32位的系统,最大可指定到3GB |
OPTIONS | – | 可通过指定选项输出日志等,例如”-d -vv 1>> /var/log/memcached.log 2>> /var/log/memcached.log” |
查看Memcached运行情况
# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. stats STAT pid 86550 STAT uptime 8758 STAT time 1437094558 STAT version 1.4.18 STAT libevent 1.4.13-stable STAT pointer_size 64 STAT rusage_user 5.710131 STAT rusage_system 14.127852 STAT curr_connections 210 STAT total_connections 7287 STAT connection_structures 224 STAT reserved_fds 20 STAT cmd_get 254594 STAT cmd_set 47166 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 250765 STAT get_misses 3829 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 1608079660 STAT bytes_written 931337346 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 12637015 STAT curr_items 14063 STAT total_items 47166 STAT expired_unfetched 8553 STAT evicted_unfetched 0 STAT evictions 0 STAT reclaimed 8738 STAT crawler_reclaimed 0 END quit Connection closed by foreign host.
安全问题
通过telnet运行Memcached服务器的11211端口可以直接查看Memcached运行情况,更危险的是可以Dump所有Memcached缓存的数据。因此我们需要使用iptables等防火墙机制,进行一个访问限制。