今天突然发现memcache里的数据部分会丢失,我是批量插入2000+个数据,程序在运行时插入的第一个数据有值,但是程序运行完毕,第一个数据就没值了,后经过检查发现,memcache分配的内存默认为64M,满了之后会自动删除部分未过期的数据,导致上述情况。后调整为2G,问题解决。特记下memcache中stats查看的数据含义:
php中查看代码:
<?php
$host = $_REQUEST['host'];
$mem = new Memcache;
$mem->connect ( $host, 11211 );
print_r ( $mem->getStats() );
?>
或者连上memcache,然后stats,详细如下:mqq@32_167_game:~> telnet server port
Trying 172.16.32.166...
Connected to 172.16.32.166.
Escape character is '^]'.
stats
STAT pid 26530
STAT uptime 5807
STAT time 1258643806
STAT version 1.2.2
STAT pointer_size 64
STAT rusage_user 12.372773
STAT rusage_system 24.233514
STAT curr_items 72820
STAT total_items 5526
STAT bytes 95306264
STAT curr_connections 115
STAT total_connections 1
STAT connection_structures 116
STAT cmd_get 12507
STAT cmd_set 5526
STAT get_hits 12498
STAT get_misses 9
STAT evictions 0
STAT bytes_read 7363968
STAT bytes_written 15636889
STAT limit_maxbytes 2147483648
STAT threads 1
END
pid | memcache服务器的进程ID |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的unix时间戳 |
version | memcache版本 |
pointer_size | 当前OS的指针大小(32位系统一般是32bit) |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_items | 服务器当前存储的items数量 |
total_items | 从服务器启动以后存储的items总数量 |
bytes | 当前服务器存储items占用的字节数 |
curr_connections | 当前打开着的连接数 |
total_connections | 从服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get命令(获取)总请求次数 |
cmd_set | set命令(保存)总请求次数 |
get_hits | 总命中次数 |
get_misses | 总未命中次数 |
evictions | 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items) |
bytes_read | 总读取字节数(请求字节数) |
bytes_written | 总发送字节数(结果字节数) |
limit_maxbytes | 分配给memcache的内存大小(字节) |
threads | 当前线程数 |