编辑: 怪只怪这光太美 | 2017-10-01 |
在PHP 的ini 配置文件里面提供了 [Session] 相关配置,可以支持将信息存到文件或 memcached 服务器里面.由配置项 session.save_handler = memcached 决定.大多数场景,该session 数据并不需要持久化,且为了提升网站 性能,会选择将 session 信息缓存到 memcached 里面. 问题 云数据库 Memcache 版和自建的 memcached 都实现了标准 memcached 协议,用户一方面为了减少服务器 内存的占用,一方面减少对 memcached 的维护,希望将 session 的存储从自建的 memcached 迁移到云数 据库 Memcache 版上面,且不希望改写代码,切换过程中遇到了问题,因此有了这篇文章,希望能帮到大家 . 云数据库 Memcache 版和自建的 memcached 最重要的区别就是 账号密码鉴权 : 云数据库 Memcache 版:分布式集群统一对外提供服务,实现了负载均衡且无单点故障,用户可自 由动态弹性调整配置且无需重启服务.既然是对外提供服务,就有相应的安全机制,如白名单、流控 、账号密码鉴权. 自建 memcached:因为大多数用户自建 memcached 是不需要设置账号密码的,跟云数据库 Memcache 版比就少了 SASL 鉴权流程.那么用户将 session 的存储从自建的 memcached 迁移到 云数据库 Memcache 上面,就需要在 php.ini 中配置账号密码. 解决方案 在老版本的 php memcached 扩展中无法支持,需要升级 php memcached 扩展至2.2.0版本,示 例代码如下: 云数据库 Memcache 版 最佳实践
1 找到刚升级 memcached.so,stat 命令确定下是否更新(注意下 modify 时间). 修改 php.ini 配置. session段:找到[Session]段落,修改存储引擎为: 修改存储地址,即Memcache 访问地址为: 修改缓存到 memcached 的key 的时间: memcached 段: 在php.ini 的全局段,建一个单独段落[memcached],然后在空白地方 加入下面配置: 安装步骤完结.上述关于 memcached 段和 Session 段其他有用参数参考链接如下: http://php.net/manual/en/memcached.configuration.php wget http://pecl.php.net/get/memcached-2.2.0.tgz tar zxvf memcached-2.2.0.tgz cd memcached-2.2.0 phpize ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl make make install session.save_handler = memcached**(注意是带d扩展)** session.save_path = be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211 (注 意带d扩展,则前面不用加tcp://,不带d的扩展需要加) session.gc_maxlifetime = 1440(单位是秒,强烈建议必须设置一个合理时间,以保证 OCS 始终只缓 存热点数据) [memcached] memcached.use_sasl = On memcached.sess_binary = On memcached.sess_sasl_username = your_ocs_name memcached.sess_sasl_password = your_ocs_password memcached.sess_locking = Off 云数据库 Memcache 版 最佳实践
2 http://php.net/manual/en/session.configuration.php 接下来是测试是否生效. 测试 写测试代码如下 session.php: 输出如下: 通过测试代码 get.php 从Memcache 获取刚才 session.php 写入的 session 数据. 该代码输出如下: 即PHP SESSION 已经成功写入 Memcache. 利用PHP长连接提高性能 session id:ttrct9coa2q62r2sodlq4qf376 session:session_value ocs_key|s:13: session_value ;
云数据库 Memcache 版 最佳实践
3 问题介绍 最近有 PHP 用户反馈对云数据库 Memcache 版做性能测试的结果,达不到预期的性能指标.通过了解具体情 况,大多数用户在使用 PHP 连接云数据库 Memcache 版时,都是通过走 Apache WEB 服务再连云数据库 Memcache 版,使用的是短连接.而每个短连接的开销不止是 socket 重连,还有复杂的重新鉴权流程,开销 比一个普通请求大许多,因此对网站的效率是有很大影响的. 解决方案 于是我们建议用户改短连接为长连接,但是云数据库Memcache要求使用的PHP MEMCACHED扩展,不像 memcache扩展那样有个pconnect接口.如何才能在PHP中建立长连接,以下教程供大家参考. 在PHP 官网介绍 memcached 构造函数时有下面一段话: 即在调用构造函数时传给它一个同样的 persistent_id 就能实现共享连接.代码实现如下: 说明 Memcached::__construct ([ string $persistent_id ] )创建一个代表到Memcached服务端连接的Memcached实例. 参数 persistent_id默认情况下,Memcached实例在请求结束后会被销毁.但可以在创建时通过persistent_id为每个实例指定唯一 的ID, 在请求间共享实例.所有通过相同的persistent_id值创建的实例共享同一个连接. 云数据库 Memcache 版 最佳实践