在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 提供了大量的内置函数,它们经过优化,执行...
编辑项目的`Web.config`文件,添加以下配置段落以启用Memcached缓存提供者和其他必要的配置: ```xml type="MemcachedProviders.Cache.CacheProviderSection,MemcachedProviders" allowDefinition="MachineTo...
7. 注意事项: 合并文件可能会影响调试,因为错误信息可能会变得难以追踪。因此,在开发阶段,可以设置PHP Minify在本地环境不启用压缩,而在生产环境启用。 8. 其他工具和替代方案: 虽然PHP Minify是一个受欢迎...
7. **README**:一般包含安装指南、使用说明和注意事项,是开始使用这个扩展之前应首先查阅的文件。 使用这个压缩包,你需要按照README中的指示将php_memcache.dll添加到PHP的扩展目录,并在php.ini文件中启用该...
- 注意事项:确保在生产环境启用压缩,而在开发环境禁用,因为压缩可能会影响调试。同时,更新静态文件后,记得清空缓存,否则可能不会看到最新的更改。 **七、其他功能** Django-compressor还支持多种特性,如条件...
5. **使用注意事项**:APMServ程序的安装路径不应包含汉字和空格,以确保正常运行。MySQL的数据文件存储在指定的目录下,网站的根目录有HTML、PHP、ASP和CGI等子目录。 6. **访问方式**:可以通过http://127.0.0.1/...
**注意事项** 1. Memcache不提供数据持久化,这意味着如果服务器重启,所有存储在内存中的数据都将丢失。如果你需要持久化存储,可以考虑使用Memcached(注意是'd'结尾)或者结合其他数据库系统使用。 2. 默认端口...
**四、W3 Total Cache的注意事项** 1. **备份与恢复**:在启用或更改插件设置前,务必备份数据库和文件,以防出现不可预见的问题。 2. **测试环境**:重大修改前,应在测试环境中进行,确保不会影响到生产站点。 ...
本文将深入探讨该系统的架构、核心功能以及在实际应用中的注意事项。 一、系统架构 PHPBlast Fourms v3.3.0采用经典的三层架构设计,包括表现层(View)、业务逻辑层(Business Logic Layer)和数据访问层(Data ...
### 注意事项 - Memcache不支持数据持久化,断电或重启后,所有缓存数据将丢失。 - 数据的大小限制在1MB以内,不适合存储大型数据。 - 在PHP 7及以上版本,推荐使用`php_memcached`扩展,因为`php_memcache`不再...
5. **安全注意事项**: - **保持更新**:定期更新到最新版本,以获取最新的安全补丁和功能改进。 - **限制访问**:避免直接通过互联网暴露phpMyAdmin,最好只在局域网内使用,并设置强密码。 - **防火墙规则**:...
- Session和Cookie:用于跟踪用户状态,理解它们的工作原理和安全注意事项。 - 文件上传和下载:使用PHP处理文件上传,了解大小限制和错误处理。 5. **PHP性能优化** - 代码优化:避免冗余代码,使用合适的数据...
通过以上步骤和注意事项,我们可以成功部署并运行 Seafile Pro Server 7.0.11,构建一个高效、安全的文件存储和协作平台。无论是个人还是企业,都可以充分利用 Seafile 的强大功能,实现文件的云端管理和协作。