1.memcached的安装
yum install memcached
memcached -h
vim /etc/sysconfig/memcached
PORT=”11211″
USER=”memcached”
MAXCONN=”1024″
CACHESIZE=”64″
OPTIONS=”"
systemctl restart memcached
systemctl start memcached
systemctl enable memcached
systemctl status memcached
systemctl stop memcached
memcached-tool 127.0.0.1:11211 stats
memcached-tool 127.0.0.1:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
2 120B 727s 1 7 yes 0 0 0
4 192B 7243s 1 3 yes 0 0 0
5 240B 72693s 1 14 yes 0 0 0
9 600B 0s 1 0 yes 0 0 0
10 752B 79s 1 1 yes 0 0 0
# slab class编号
Item_Size chunk大小
Max_age LUR内最旧的记录生存时间
Pages 分配给slab的页数
Count slab内的记录数
Full? slab内是否含有空闲chunk
2./etc/php.d/memcache.ini详解
; ----- Enable memcache extension module
extension=memcache.so
; ----- Options for the memcache module
; see http://www.php.net/manual/en/memcache.ini.php
; Whether to transparently failover to other servers on errors
;memcache.allow_failover=1 (连接出错时Memcache扩展是否故障转移到其他服务器上默认为1)
; Data will be transferred in chunks of this size
;memcache.chunk_size=32768 (控制数据传输的大小)
; Autocompress large data
;memcache.compress_threshold=20000
; The default TCP port number to use when connecting to the memcached server
;memcache.default_port=11211 (设置连接Memcache所使用的TCP端口)
; Hash function {crc32, fnv}
;memcache.hash_function=crc32
; Hash strategy {standard, consistent}
;memcache.hash_strategy=consistent (哈希策略)
; Defines how many servers to try when setting and getting data.
;memcache.max_failover_attempts=20 (限制连接到持久性数据或检索数据的服务器数目)
; The protocol {ascii, binary} : You need a memcached >= 1.3.0 to use the binary protocol
; The binary protocol results in less traffic and is more efficient
;memcache.protocol=ascii
; Redundancy : When enabled the client sends requests to N servers in parallel
;memcache.redundancy=1
;memcache.session_redundancy=2
; Lock Timeout
;memcache.lock_timeout = 15
; ----- Options to use the memcache session handler
; RPM note : save_handler and save_path are defined
; for mod_php, in /etc/httpd/conf.d/php.conf
; for php-fpm, in /etc/php-fpm.d/*conf
; Use memcache as a session handler
;session.save_handler=memcache
; Defines a comma separated of server urls to use for session storage;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
2.php操作memcache的使用测试
2.1创建KEY值数据
vi test1.php
<?php
$mem = new memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key20', 'This is a test!', 0, 60);
$val = $mem->get('key20');
echo $val;
?>
2.2替换KEY值数据
vi test2.php
<?php
$mem = new memcache;
$mem->connect("127.0.0.1", 11211);
$mem->replace('key20', 'This is replace value', 0, 60);
$val = $mem->get('key20');
echo $val;
?>
2.3删除KEY值数据
vi test3.php
<?php
$mem = new memcache;
$mem->connect("127.0.0.1", 11211);
$mem->delete('key20');
$val = $mem->get('key20');
echo $val;
?>
php -f test1.php(执行php -h看帮助)
命令帮助:
Memcache::add // 添加一个值,如果已经存在,则返回false
Memcache::addServer // 添加Memcache地址
Memcache::close // 关闭一个Memcache的连接
Memcache::connect // 打开一个到Memcache的连接
Memcache::decrement // 对保存的某个key中的值进行减法操作
Memcache::delete // 删除一个Memcache上的key值
Memcache::flush // 刷新所有Memcache上保存的项目(类似于删除所有的保存的项目)
Memcache::get // 从Memcache上获取一个key值
Memcache::getExtendedStats // 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus // 获取运行服务器的参数
Memcache::getStats //获取当前Memcache服务器运行的状态
Memcache::getVersion // 返回运行的Memcache的版本信息
Memcache::increment // 对保存的某个key中的值进行加法操作
Memcache::pconnect // 打开一个到Memcache的长连接
Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold // 对大于某一大小的数据进行压缩
Memcache::setServerParams // 在运行时修改服务器的参数
2.查看memcached性能状态
2.1查看服务器性能信息
# telnet localhost 11211
stats(此处输入stats命令)
STAT pid 1277 (进程ID)
STAT uptime 176145 (服务器运行秒数,秒)
STAT time 1448592684 (服务器当前unix时间戳)
STAT version 1.4.15 (服务器版本)
STAT libevent 2.0.21-stable
STAT pointer_size 64 (操作系统字大小 32/64位)
STAT rusage_user 3.869494 (进程累计用户时间,秒)
STAT rusage_system 4.636292 (进程累计系统时间,秒)
STAT curr_connections 11 (当前打开连接数)
STAT total_connections 21 (曾打开的连接总数)
STAT connection_structures 12 (服务器分配的连接结构数)
STAT reserved_fds 20
STAT cmd_get 483 (执行get命令总数)
STAT cmd_set 144 (执行set命令总数)
STAT cmd_flush 0 (指向flush_all命令总数)
STAT cmd_touch 0
STAT get_hits 369 (get未命中次数)
STAT get_misses 114 (get未命中次数)
STAT delete_misses 0 (delete未命中次数)
STAT delete_hits 0 (delete命中次数)
STAT incr_misses 0 (incr未命中次数)
STAT incr_hits 0 (incr命中次数)
STAT decr_misses 0 (decr未命中次数)
STAT decr_hits 0 (decr命中次数)
STAT cas_misses 0 (cas未命中次数)
STAT cas_hits 0 (cas命中次数)
STAT cas_badval 0 (使用擦拭次数)
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 82819 (读取字节总数)
STAT bytes_written 104266 (写入字节总数)
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 bytes 4789 (存储item字节数)
STAT curr_items 20 (item个数)
STAT total_items 144 (item总数)
STAT expired_unfetched 15
STAT evicted_unfetched 0
STAT evictions 0 (获取空间删除item的总数)
STAT reclaimed 36
END
quit(此处输入quit退出memcached状态查看)
2.2查看每个slab中存储items的详细信息
# telnet localhost 11211
stats items(此处输入stats命令)
STAT items:4:number 3
STAT items:4:age 2140(当前数据中缓存最久的时间,一般小于evicted_time(不为0)时间)
STAT items:4:evicted 0(如果evicted不是0,说明slab开始提前剔除数据,需要注意)
STAT items:4:evicted_nonzero 0
STAT items:4:evicted_time 0(最后被剔除数据的缓存时间,不是发生LRU就memcached负载过量)
STAT items:4:outofmemory 0
STAT items:4:tailrepairs 0
STAT items:4:reclaimed 6
STAT items:4:expired_unfetched 1
STAT items:4:evicted_unfetched 0
STAT items:5:number 15
STAT items:5:age 67590
STAT items:5:evicted 0
STAT items:5:evicted_nonzero 0
STAT items:5:evicted_time 0
STAT items:5:outofmemory 0
STAT items:5:tailrepairs 0
STAT items:5:reclaimed 22
STAT items:5:expired_unfetched 10
STAT items:5:evicted_unfetched 0
STAT items:10:number 1
STAT items:10:age 283
STAT items:10:evicted 0
STAT items:10:evicted_nonzero 0
STAT items:10:evicted_time 0
STAT items:10:outofmemory 0
STAT items:10:tailrepairs 0
STAT items:10:reclaimed 13
STAT items:10:expired_unfetched 7
STAT items:10:evicted_unfetched 0
END
2.3查看slab内存分配信息
# telnet localhost 11211
stats slabs(此处输入stats命令)
STAT 4:chunk_size 192 (当前slab每个chunk的大小,固定值)
STAT 4:chunks_per_page 5461(每个page能够存放的chunk数,固定值)
STAT 4:total_pages 1 (分配给当前slab的page总数,单位M。slab剔除严重,该值会太少)
STAT 4:total_chunks 5461 (当前slab最多能够存放的chunk数,=chunks_per_page*total_pages)
STAT 4:used_chunks 3 (已经被占用的chunks总数)
STAT 4:free_chunks 5458 (过期数据空出的chunk里还没有被使用的chunk数)
STAT 4:free_chunks_end 0 (新分配但还没有被使用的chunk数)
STAT 4:mem_requested 555
STAT 4:get_hits 136
STAT 4:cmd_set 9
STAT 4:delete_hits 0
STAT 4:incr_hits 0
STAT 4:decr_hits 0
STAT 4:cas_hits 0
STAT 4:cas_badval 0
STAT 4:touch_hits 0
STAT 5:chunk_size 240
STAT 5:chunks_per_page 4369
STAT 5:total_pages 1
STAT 5:total_chunks 4369
STAT 5:used_chunks 14
STAT 5:free_chunks 4355
STAT 5:free_chunks_end 0
STAT 5:mem_requested 3158
STAT 5:get_hits 158
STAT 5:cmd_set 43
STAT 5:delete_hits 0
STAT 5:incr_hits 0
STAT 5:decr_hits 0
STAT 5:cas_hits 0
STAT 5:cas_badval 0
STAT 5:touch_hits 0
STAT 10:chunk_size 752
STAT 10:chunks_per_page 1394
STAT 10:total_pages 1
STAT 10:total_chunks 1394
STAT 10:used_chunks 1
STAT 10:free_chunks 1393
STAT 10:free_chunks_end 0
STAT 10:mem_requested 646
STAT 10:get_hits 104
STAT 10:cmd_set 105
STAT 10:delete_hits 0
STAT 10:incr_hits 0
STAT 10:decr_hits 0
STAT 10:cas_hits 0
STAT 10:cas_badval 0
STAT 10:touch_hits 0
STAT active_slabs 3
STAT total_malloced 3145360
END
报错1:执行memcached -vv报错can't run as root without the -u switch
解决1:memcached -vv -u root
3.增加memcache缓存日志
yum -y install php-pecl-memcache
如果是PHP56版本的应该运行
yum -y install php56w-pecl-memcache
防火墙放开11211
firewall-cmd --permanent --zone=public --add-port=11211/tcp
检查端口是否开放
echo stats | nc memcache_host_name_or_ip 11211
增加日志
/bin/memcached -d -m 512 -l 127.0.0.1 -p 10000 -u root -vv >> /tmp/memcached.log 2>&1
tail -f /tmp/memcached.log
4.memcache缓存mysql的测试页面
vi mysql-memcache.php
<?php
$host = 'IP:3306';
$user = 'guowang';
$passwd = '123456';
$db = 'test';
$conn = mysql_connect($host,$user,$passwd);
mysql_select_db($db,$conn);
$sql = 'select * from t order by id desc';
$result = mysql_query($sql,$conn);
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){
$test_key[] = $row;
}
$sql = md5($sql);
$mem = new Memcache;
$mem->connect("IP", 11211);
$mem->set($sql,$test_key, MEMCACHE_COMPRESSED, 600);
print_r($mem->get($sql));
?>
5.memcached禁止外网访问
lnmp默认安装的memcached是可以外网访问的,对于我这个小站来说外网不会用到,所以只允许内网用。修改文件vi /etc/init.d/memcached
PORT=11211
USER=root
MAXCONN=1024
CACHESIZE=32
OPTIONS=""
IP=127.0.0.1
RETVAL=0
prog="memcached"
start () {
echo -n $"Starting $prog: "
memcached -d -l $IP -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached.pid $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
如果有安装iptables的话可以用iptables来禁止外网访问
6.未完成
http://www.linuxidc.com/Linux/2015-05/117170.htm
转载于:https://blog.51cto.com/guowang327/1709503