843
阿裏雲
緩存 PHP session 變量__最佳實踐_雲數據庫 Memcache 版-阿裏雲
背景介紹
用戶在利用 PHP 搭建網站時,會把一些信息存放在 $_SESSION 全局變量裏,可以很方便的存取。在 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版本,示例代碼如下:
wget https://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
找到剛升級 memcached.so,
stat
命令確定下是否更新(注意下 modify 時間)。修改 php.ini 配置。
session段:找到[Session]段落,修改存儲引擎為:
session.save_handler = memcached**(注意是帶d擴展)**
修改存儲地址,即 Memcache 訪問地址為:
session.save_path = "be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211"(注意帶d擴展,則前麵不用加tcp://,不帶d的擴展需要加)
修改緩存到 memcached 的 key 的時間:
session.gc_maxlifetime = 1440(單位是秒,強烈建議必須設置一個合理時間,以保證 OCS 始終隻緩存熱點數據)
memcached 段: 在 php.ini 的全局段,建一個單獨段落[memcached],然後在空白地方加入下麵配置:
[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
安裝步驟完結。上述關於 memcached 段和 Session 段其他有用參數參考鏈接如下:
https://php.net/manual/en/memcached.configuration.php
https://php.net/manual/en/session.configuration.php
接下來是測試是否生效。
測試
寫測試代碼如下 session.php:
<?php
session_start();
$sn = session_id();
echo "session id:".$sn."n";
$_SESSION["ocs_key"]="session_value";
echo "session:".$_SESSION["ocs_key"]."n";
?>
輸出如下:
session id:ttrct9coa2q62r2sodlq4qf376
session:session_value
通過測試代碼 get.php 從 Memcache 獲取剛才 session.php 寫入的 session 數據。
<?php
$memc = new Memcached();
$memc->setOption(Memcached::OPT_COMPRESSION, false);
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$memc->addServer("be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com", 11211);
$memc->setSaslAuthData("your_ocs_name", "your_ocs_password");
echo $memc->get("memc.sess.key.ttrct9coa2q62r2sodlq4qf376");
/*注意這裏的key是有前綴的,由php.ini中memcached.sess_prefix字段決定,默認值為"memc.sess.key."。然後再拚接上麵打出來的sessionid“ttrct9coa2q62r2sodlq4qf376”即可。*/
?>
該代碼輸出如下:
ocs_key|s:13:"session_value";
即 PHP SESSION 已經成功寫入 Memcache。
最後更新:2016-12-20 14:09:22
上一篇:
監控與報警__用戶指南_雲數據庫 Memcache 版-阿裏雲
下一篇:
利用PHP長連接提高性能__最佳實踐_雲數據庫 Memcache 版-阿裏雲
使用 psql 命令遷移 PostgreSQL 數據__快速入門(PostgreSQL)_雲數據庫 RDS 版-阿裏雲
實驗目標__快速入門_推薦引擎-阿裏雲
2.1 在線圖片處理__2. OSS最佳實踐_開放存儲OSS 體驗_體驗館-阿裏雲
查看伸縮活動___用戶指南_彈性伸縮-阿裏雲
通告__產品簡介_大數據計算服務-阿裏雲
刪除專有網絡__專有網絡相關接口_API 參考_雲服務器 ECS-阿裏雲
查詢作業列表__作業_API參考_E-MapReduce-阿裏雲
示例項目使用說明__開發準備_開發人員指南_E-MapReduce-阿裏雲
ECS雲服務器自動快照FAQ
創建表格存儲實例(可選)__用戶指南_推薦引擎-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲