memcache设置

 Memcached是一个高性能分布式缓存系统,目前估计是很多公司的标配了,因为他被非常广泛的使用,在各种语言下都有其丰富的client,所以很多后端服务也采用了兼容的memcached协议,比如memcachedbttserver等等。所以最近我开发的队列服务器也采用了memcached协议,底层是基于磁盘的存储,单独测试底层存储的性能非常好,在我台式机能达到每秒写入3万1K的数据。

          今天用php测试了下往刚刚开发的队列服务器(icqueue)插入数据,代码如下:

 

复制代码
  
  
<? php
$mem = new Memcache();
$mem -> addServer ( " 127.0.0.1 " , 12001 , false , 1 , 100 );
$start = microtime ( true );
$str = str_repeat ( " a " , 1024 ); // 1k数据
for ( $i = 0 ; $i < 100000 ; $i ++ ){
$mem -> add( " bbs_password_ " , $str , 0 , 0 ); // 入队,bbs为队列名称,password为密码
}
echo microtime ( true ) - $start ;
?>
复制代码

 

 

执行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.php

 5.6957609653473

花了5秒,感觉速度还是挺快,还是单进程跑的。接着我想测试大一点的数据,把其中的

 

  
  
$str = str_repeat ( " a " , 1024 ); // 1k数据

 

改为

  
  
$str = str_repeat ( " a " , 1024 * 10 ); // 10k数据

执行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.php发现速度非常的慢,等了1分钟也没有成功。怀疑是队列服务(icqueue)有问题,又换成memcached服务器写数据测试,发现速度同样的慢。

这就排除了是服务端的问题。经过调整数据的大小,发现只要达到8K就非常慢。

然后怀疑是不是到了8K memcach自动进行了压缩,是压缩很慢呢?又去telnet进去,发现数据是没有压缩的。

剩下的问题应该就是网络问题了,翻看了memcach扩展的手册,发现其中memcache.chunk_size的大小默认是8K,灵感一现,希望就是这这个问题导致的。

然后又改代码:

 

 

复制代码
  
  
<? php
ini_set ( ' memcache.chunk_size ' , 1024 * 15 ); // 设置到15K
$mem = new Memcache();
$mem -> addServer ( " 127.0.0.1 " , 12001 , false , 1 , 100 );
$start = microtime ( true );
$str = str_repeat ( " a " , 1024 * 10 ); // 10k数据
for ( $i = 0 ; $i < 100000 ; $i ++ ){
$mem -> add( " bbs_password_ " , $str , 0 , 0 ); // 入队,bbs为队列名称,password为密码
}
echo microtime ( true ) - $start ;
?>
复制代码

 

执行:[root@sunlitest1 bbs]# /usr/local/php/bin/php mem.php

 

10.800881147385

跑了10完成,OK,问题解决了。

memcache.chunk_size在php.ini设置的。大小推荐设置为你的数据的常规大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值