今天来测试一下,默认的memcache 64M内存,可以放多少数据。
本次测试结果:
如果没有足够的内存,系统为了保障性能,开始释放对象,往memcache里面存储数据的同时,在不停的释放数据,让内存占用永远达不到设定的64M。
测试用例:
1、memcache版本,1.4.4,所有设置均为系统默认,分配的内存总大小为64M
2、测试存储的数据为正常的新闻文章数据。
测试就是写个php程序,不停的往memcache里面存储数据,代码如下
<?php
$id=@$_GET['id'];
$st=200;
$max=$id+$st;
//实例化一个memcache对象,并连接
$memca=new Memcache;
if(!$memca->connect('127.0.0.1',11211)) exit('连接失败');
//从数据库中获取标题
$conn=mysql_connect('localhost','root','root') or die("数据库连接失败".mysql_error());//链接MYsql服务器
mysql_select_db('xa1288_com'); mysql_query("set names utf8");
$sql1 = "select * from wl_news where id>=".$id." and id<".$max;
$result = mysql_query($sql1);
if($result && mysql_num_rows($result)>0){
while($res=mysql_fetch_assoc($result)){
$arr[]=$res;
}
}
for ($x=0; $x<$st; $x++) {
if($arr[$x]!='')
{
$memca->set($arr[$x]['id'],$arr[$x]);
}
}
$memca->close();
?>
<p id="page_div">将在2秒后自动跳转到首页</p>
<script language="javascript">
var num = 2; //倒计时的秒数
var URL = "http://www.localhost.qq/test/17/test.php?id=<?php echo $max?>";
window.setTimeout("doUpdate()", 1000);
function doUpdate(){
if(num != 0){
document.getElementById('page_div').innerHTML = '将在'+num+'秒后自动跳转到首页' ;
num --;
window.setTimeout("doUpdate()", 1000);
}else{
num = 2;
window.location = URL;
}
}
</script>
经过对比观察memadmin发现,当数据存储到9000多条的时候,evictions,LRU已经开始释放对象数目了。如下图
此时内存应该只占用50M多,系统为了保障性能,开始释放对象了,往memcache里面存储数据的同时,在不停的释放数据,让内存占用永远达不到设定的64M。
evictions:LRU释放的对象数目(如果还有足够内存,那么这个值应该是0或者不再增长) 为了给新的数据项目释放空间,从缓存移除的缓存对象的数目,比如超过缓存大小时根据LRU算法移除的对象以及过期的对象。