`

启用memcached压缩注意事项

阅读更多
在php开发中,开启memcache的数据压缩存储是一件很简单的事情。在多数情况下,压缩数据不仅不会降低程序的执行效率,反倒会因为网络传输的开销降低,带来速度提升。看看最常用的Memcache::set方法:
bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )

在这个方法中,将$flag设置为MEMCACHE_COMPRESSED即可启用memcache压缩存储。
这样做有什么弊端?

如果没有做额外判断,每一次写入memcache都会启用压缩,不管数据的大小。对应的,每次获得数据都需要做一次解压缩的操作,这是典型的一刀切手法。实际上在数据很小的情况下,不需要压缩,在这个基础上压缩省不了多少空间。
更好的压缩策略?

好了,我的想法是在数据超过一定大小(比如2k)的情况下,才开启压缩。这个好办,捋起袖子就干,在调用Memcache::set方法之前,首先判断一下数据的大小,一个strlen就搞定了,再简单不过了。
PLAIN TEXT
PHP:

 
 
      $memcache = new Memcache;  
      $memcache->connect('localhost', 11211);  
      $flag = strlen($data)> 2048 ? MEMCACHE_COMPRESSED : 0;
      $memcache->set('mykey', $data, $flag);


有人可能会问了,array和object怎么办,这玩意可不能用strlen判断长度。

这还真能难住我一阵子,要知道把array/object写入memcache的时候,php会自动做serialize,再把它当作字符串插入memcache。
PLAIN TEXT

    
 $flag = strlen(serialize($data))> 2048 ? MEMCACHE_COMPRESSED : 0;


谁会采用这段代码?看起来非常山寨,而且serialize也不快,赔本买卖。
更好的办法!

上面的文字都是废话,直接看这段就好。Memcache::setCompressThreshold方法可以包办之前所有的逻辑。

  
 Memcache::setCompressThreshold — Enable automatic compression of large values

bool Memcache::setCompressThreshold ( int $threshold [, float $min_savings ] )

举个例子,下面这段会自动启用压缩策略,当数据大于2k时,以0.2的压缩比进行zlib。
PLAIN TEXT

  
   $memcache->setCompressThreshold(2000, 0.2);


根据我的测试结果,setCompressThreshold方法会忽略Memcache::set的flag参数。
分享到:
评论

相关推荐

    代码编写注意事项

    在编程实践中,尤其是在 PHP 开发中,遵循一定的代码编写注意事项能显著提升代码的效率和可维护性。以下是一些关键的点,可以帮助你优化代码: 1. **利用内置函数**:PHP 提供了大量的内置函数,它们经过优化,执行...

    Memcached使用手册

    编辑项目的`Web.config`文件,添加以下配置段落以启用Memcached缓存提供者和其他必要的配置: ```xml type="MemcachedProviders.Cache.CacheProviderSection,MemcachedProviders" allowDefinition="MachineTo...

    基于PHP的minify 自动压缩合并JS和CSS(减少请求数).zip

    7. 注意事项: 合并文件可能会影响调试,因为错误信息可能会变得难以追踪。因此,在开发阶段,可以设置PHP Minify在本地环境不启用压缩,而在生产环境启用。 8. 其他工具和替代方案: 虽然PHP Minify是一个受欢迎...

    php_memcache-3.0.8-5.6-ts-vc11-x86.zip

    7. **README**:一般包含安装指南、使用说明和注意事项,是开始使用这个扩展之前应首先查阅的文件。 使用这个压缩包,你需要按照README中的指示将php_memcache.dll添加到PHP的扩展目录,并在php.ini文件中启用该...

    Python-CompresseslinkedandinlinejavascriptorCSSintoasinglecachedfile

    - 注意事项:确保在生产环境启用压缩,而在开发环境禁用,因为压缩可能会影响调试。同时,更新静态文件后,记得清空缓存,否则可能不会看到最新的更改。 **七、其他功能** Django-compressor还支持多种特性,如条件...

    APMServ如何使用.docx

    5. **使用注意事项**:APMServ程序的安装路径不应包含汉字和空格,以确保正常运行。MySQL的数据文件存储在指定的目录下,网站的根目录有HTML、PHP、ASP和CGI等子目录。 6. **访问方式**:可以通过http://127.0.0.1/...

    Memcache For PHP 5.3.28 (Win32版本)

    **注意事项** 1. Memcache不提供数据持久化,这意味着如果服务器重启,所有存储在内存中的数据都将丢失。如果你需要持久化存储,可以考虑使用Memcached(注意是'd'结尾)或者结合其他数据库系统使用。 2. 默认端口...

    w3-total-cache_WordPress_TheNetwork_plugin_W3TotalCache_

    **四、W3 Total Cache的注意事项** 1. **备份与恢复**:在启用或更改插件设置前,务必备份数据库和文件,以防出现不可预见的问题。 2. **测试环境**:重大修改前,应在测试环境中进行,确保不会影响到生产站点。 ...

    商业源码-编程源码-PHPBlast Fourms v3.3.0 gbk.zip

    本文将深入探讨该系统的架构、核心功能以及在实际应用中的注意事项。 一、系统架构 PHPBlast Fourms v3.3.0采用经典的三层架构设计,包括表现层(View)、业务逻辑层(Business Logic Layer)和数据访问层(Data ...

    php_memcache

    ### 注意事项 - Memcache不支持数据持久化,断电或重启后,所有缓存数据将丢失。 - 数据的大小限制在1MB以内,不适合存储大型数据。 - 在PHP 7及以上版本,推荐使用`php_memcached`扩展,因为`php_memcache`不再...

    [其他类别]phpMyAdmin 3.2.1.0 Final For Windows_phpmyadmin2.zip

    5. **安全注意事项**: - **保持更新**:定期更新到最新版本,以获取最新的安全补丁和功能改进。 - **限制访问**:避免直接通过互联网暴露phpMyAdmin,最好只在局域网内使用,并设置强密码。 - **防火墙规则**:...

    PHP面试题库

    - Session和Cookie:用于跟踪用户状态,理解它们的工作原理和安全注意事项。 - 文件上传和下载:使用PHP处理文件上传,了解大小限制和错误处理。 5. **PHP性能优化** - 代码优化:避免冗余代码,使用合适的数据...

    seafile-pro-server_7.0.11_x86-64.tar.gz

    通过以上步骤和注意事项,我们可以成功部署并运行 Seafile Pro Server 7.0.11,构建一个高效、安全的文件存储和协作平台。无论是个人还是企业,都可以充分利用 Seafile 的强大功能,实现文件的云端管理和协作。

Global site tag (gtag.js) - Google Analytics