我一直试图清除我的内存缓存,因为我注意到存储在使用时占用了近30%的服务器内存ps -aux
.
所以我运行了以下PHP代码.
$memcache = new Memcache; $memcache->connect("localhost",11211); $memcache->flush(); print_r($memcache->getStats());
这导致输出
( [pid] => 4936 [uptime] => 27318915 [time] => 1255318611 [version] => 1.2.2 [pointer_size] => 64 [rusage_user] => 9.659531 [rusage_system] => 49.770433 [curr_items] => 57864 [total_items] => 128246 [bytes] => 1931734247 [curr_connections] => 1 [total_connections] => 128488 [connection_structures] => 17 [cmd_get] => 170288 [cmd_set] => 128246 [get_hits] => 45464 [get_misses] => 124824 [evictions] => 1009 [bytes_read] => 5607431213 [bytes_written] => 1806543589 [limit_maxbytes] => 2147483648 [threads] => 1 )
这应该是相当基本的,但显然,我遗漏了一些东西.
您确实需要更改memcached设置,以便它不会占用尽可能多的内存.当你启动memcached时,你可以使用-m
标志传递它应该使用的内存量,以兆字节为单位.有关信息,请参阅其文档.
flush
只是使缓存中的所有项无效,它不会命令memcached释放或取消保存它正在使用的内存.我怀疑你可以命令memcached释放它正在使用的内存.
Colin,Flush All命令使缓存将所有到期时间设置为当前.对现有密钥的下一个请求将不返回任何内容,并且将从缓存中删除该记录.Memcached没有单独的进程来清理过期的项目,并使用"懒惰"方法,这使得该过程非常轻量和高效.因此,如果您需要实际删除缓存并从头开始,唯一真正的方法是重新启动Memcached.一个很长的解决方法是转储所有密钥,发送Flush All命令,然后遍历每个运行get对它的密钥,导致记录被删除.不是100%确定这种方法是否有效但理论上听起来似乎有道理.