注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿飘的博客

十里平湖霜满天 寸寸青丝愁华年

 
 
 

日志

 
 

memcache压缩存储小测试  

2012-06-20 17:41:34|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
将一个数组$arrs存入mc,mc存储数据时,是将其序列化存储的,计算一下长度为:strlen(serialize($arrs)) = 4072,使用stats来查看实际存入的bytes。

使用setCompressThreshold,设置为超过2000字节,则压缩,压缩比例为0.2。
$mem->setCompressThreshold(2000,0.2);
$mem->set('test_mem',$arrs,0,720);

发现实际存储了902个字节。

将0.2放大,一直放大到0.7,都是存902个字节。
放大到0.8后,就是存4132个字节
不设置setCompressThreshold存储,也是存4132字节。

再设一下$arrs的长度为2643,0.2压缩时为627字节,不压缩时为2703字节。

压缩和不压缩存储的字节数还是差不少的!

文档中写:
引用
bool Memcache::setCompressThreshold ( int threshold [, float min_savings] )
threshold : Controls the minimum value length before attempting to compress automatically.
min_saving : Specifies the minimum amount of savings to actually store the value compressed. The supplied value must be between 0 and 1. Default value is 0.2 giving a minimum 20% compression savings.
实际测试说明它这个压缩参数(min_saving)是没用的,要么是启用压缩,要么就是不启用压缩>0.8时。由于默认是0.2,因此要启用压缩的话,可以省略这个参数。则使用:$mem->setCompressThreshold(2000);


具体的压缩比例还是要看存储的实际内容。
如果是简单的数字组成的数组,压缩比例可能可以压到7%。
实际:1008900字节,写入1008963字节,压缩后,实际写入才69948字节。
如果是一百多篇文章内容组成的数组,压纹比例可能也就40%多。
实际:1040730字节,压缩后,写入420165字节。


另外,不管有没有设置setCompressThreshold,取出时都无需设置,$mem->get会自动判断取出来的数据是否有压缩过,压缩过则解压,没压缩过则直接输出。

之后,再测试了下memcached的压缩情况,和memcache的压缩不是完全一样,都需要多存1字节,但几乎可以认为压缩比是一模样的。
引用
Memcached::OPT_COMPRESSION
开启或关闭压缩功能。当开启的时候,item的值超过某个阈值(当前是100bytes)时,会首先对值进行压缩然后存储,并 在获取该值时进行解压缩然后返回,使得压缩对应用层透明。 类型: boolean, 默认: TRUE.

memcached默认就开启压缩,因此代码中无需设置。

实际字节 mc存储 mc压缩存储 mcd存储
1008900 1008963 69948 69949
1040730 1040793 420097 420098
6207 6267 1253 1254
1000000 1000063 2025 2026
  评论这张
 
阅读(1842)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018