下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、云數(shù)據(jù)庫 Memcache 版最佳實踐云數(shù)據(jù)庫 Memcache 版/最佳實踐 PAGE 4最佳實踐利用云數(shù)據(jù)庫Memcache緩存Tomcat Session全局變量一、場景介紹用戶在利用PHP搭建網(wǎng)站時,會把一些信息存放在$_SESSION全局變量里,可以很方便的存取。在PHP的ini配 置文件里面提供了Session相關(guān)配置,可以支持將信息存到文件或memcached服務(wù)器里面。由配置項session.save_handler = memcached決定。大多數(shù)場景,該session數(shù)據(jù)并不需要持久化,且為了提升網(wǎng)站性能,會選擇將session信息緩存到memcached里面。二、問題現(xiàn)
2、在問題來了,已知云數(shù)據(jù)庫Memcache版是實現(xiàn)了標(biāo)準(zhǔn)memcached協(xié)議的緩存,用戶一方面為了減少服務(wù) 器內(nèi)存占用,一方面減少對memcached的維護,希望將session的存儲從自建的memcached遷移到云數(shù)據(jù)庫Memcache上面,且不希望改寫代碼。切換過程中遇到了問題,因此有了這篇文章,希望能幫到大家。首先弄清云數(shù)據(jù)庫Memcache版和自建的memcached的區(qū)別,他們都實現(xiàn)了標(biāo)準(zhǔn)memcached協(xié)議。但云數(shù) 據(jù)庫Memcache是分布式集群統(tǒng)一對外提供服務(wù),實現(xiàn)了負載均衡且無單點故障,用戶可自由動態(tài)彈性調(diào)整配 置且無需重啟服務(wù)。既然是對外提供服務(wù),就有相應(yīng)的安全機制,如
3、白名單、流控、賬號密碼鑒權(quán)。這里對比 自建memcached,最重要的區(qū)別就是賬號密碼鑒權(quán),因為大多數(shù)用戶自建memcached是不需要設(shè)置賬號密 碼的,跟云數(shù)據(jù)庫Memcache版比就少了SASL鑒權(quán)流程。那么用戶將session的存儲從自建的memcached遷 移到云數(shù)據(jù)庫Memcache上面,就需要在php.ini中配置賬號密碼。三、解決1、在老版本的php memcached擴展中無法支持,需要升級php memcached擴展至2.2.0版本。重新按照阿里云云數(shù)據(jù)庫Memcache官網(wǎng)的PHP教程示例編譯擴展。步驟如下: wget HYPERLINK /get/memcached-
4、2.2.0.tgz /get/memcached-2.2.0.tgz tar zxvf memcached-2.2.0.tgz cd memcached-2.2.0phpize./configure -with-libmemcached-dir=/usr/local/libmemcached -enable-memcached-saslmakemake install 2、找到剛升級memcached.so,stat命令確定下是否更新(注意下modify時間) 3、修改php.ini配置session段 找到Session段落,修改存儲引擎為: session.save_handler = m
5、emcached(注意是帶d擴展) 修改存儲地址,即OCS訪問地址為:session.save_path = :11211(注意帶d擴展,則前面不用加tcp:/,不帶d的擴展需要加)修改緩存到memcached的key的時間 session.gc_maxlifetime = 1440(單位是秒,強烈建議必須設(shè)置一個合理時間,以保證OCS始終只緩存熱點數(shù)據(jù))memcached memcached.use_sasl = On memcached.sess_binary = Onmemcached.sess_sasl_username = your_ocs_name memcached.sess_s
6、asl_password = your_ocs_password memcached.sess_locking = Offmemcached段 在php.ini的全局段,建一個單獨段落memcached,然后在空白地方加入下面配置安裝步驟完結(jié),上述關(guān)于memcached段和Session段其他有用參數(shù),參考鏈接如下: HYPERLINK /manual/en/memcached.configuration.php /manual/en/memcached.configuration.php HYPERLINK /manual/en/session.configuration.php /manu
7、al/en/session.configuration.php接下來是測試是否生效。四、測試寫測試代碼如下session.php輸出如下:session id:ttrct9coa2q62r2sodlq4qf376session:session_valuesetOption(Memcached:OPT_COMPRESSION, false);$memc-setOption(Memcached:OPT_BINARY_PROTOCOL, true);$memc-addServer(, 11211);$memc-setSaslAuthData(your_ocs_name, your_ocs_passw
8、ord); echo $memc-get(memc.sess.key.ttrct9coa2q62r2sodlq4qf376);/*注意這里的key是有前綴的,由php.ini中memcached.sess_prefix字段決定,默認(rèn)值為memc.sess.key.。然后再拼接上面 打出來的sessionidttrct9coa2q62r2sodlq4qf376即可。*/?測試代碼get.php去從OCS獲取剛才session.php通過session寫入的數(shù)據(jù)該 代 碼 輸 出 如 下 : ocs_key|s:13:session_value;即PHP SESSION已經(jīng)成功寫入OCS。利用PH
9、P長連接提高使用云數(shù)據(jù)庫Memcache(原OCS)的性能最近有PHP用戶反饋對云數(shù)據(jù)庫Memcache做性能測試的結(jié)果,達不到預(yù)期的性能指標(biāo)。通過了解了具體情況,大多數(shù)用戶在使用PHP連接云數(shù)據(jù)庫Memcache時,都是通過走Apache WEB服務(wù)再連云數(shù)據(jù)庫Memcache,使用的是短連接。而每個短連接的開銷不止是socket重連,還有復(fù)雜的重新鑒權(quán)流程,開銷比一 個普通請求大許多,因此對網(wǎng)站的效率是有很大影響的。于是我們建議用戶改短連接為長連接,但是云數(shù)據(jù)庫Memcache要求使用的PHP MEMCACHED擴展,不像memcache擴展那樣有個pconnect接口。如何才能在PHP中
10、建立長連接,以下教程供大家參考。說明Memcached: construct ( string $persistent_id )創(chuàng)建一個代表到Memcached服務(wù)端連接的Memcached實例。參數(shù)persistent_id默認(rèn)情況下,Memcached實例在請求結(jié)束后會被銷毀。但可以在創(chuàng)建時通過persistent_id為每個實例指定唯一 的ID, 在請求間共享實例。所有通過相同的persistent_id值創(chuàng)建的實例共享同一個連接。在PHP官網(wǎng)介紹memcached構(gòu)造函數(shù)時有下面一段話: HYPERLINK /manual/zh/memcached.construct.php /man
11、ual/zh/memcached.construct.php即在調(diào)用構(gòu)造函數(shù)時傳給它一個同樣的persistent_id就能實現(xiàn)共享連接。代碼實現(xiàn)如下:getServerList() = 0) /*建立連接前,先判斷*/echo New connection.;/*所有option都要放在判斷里面,因為有的option會導(dǎo)致重連,讓長連接變短連接!*/$memc-setOption(Memcached:OPT_COMPRESSION, false);$memc-setOption(Memcached:OPT_BINARY_PROTOCOL, true);/* addServer 代碼必須在判斷
12、里面,否則相當(dāng)于重復(fù)建立ocs這個連接池,可能會導(dǎo)致客戶端php程序異常*/$memc-addServer(your_ip, 11212);$memc-setSaslAuthData(user, password);elseecho Now connections is:.count($memc-getServerList().;$memc-set(key, value);echo Get from OCS: .$memc-get(key);/$memc-quit();/*代碼結(jié)束的地方一定不能加quit,否則變短連接!*/?上述代碼要特別注意的三個地方都加了注釋。構(gòu)造函數(shù)里的ocs關(guān)鍵字,就
13、相當(dāng)于一個連接池了,需要使用的 連接調(diào)用new Memcached(ocs)就能從池里獲取連接。接下來看看執(zhí)行結(jié)果。New connection Get from OCS: value將上述代碼放到Apache工作路徑/var/www/html/下面,命名為test.php.然后再瀏覽器輸入http:/your_ip:80/test.php.前8次瀏覽器都輸出結(jié)果為:即這8次都是新建連接,而8次后都是復(fù)用這8個鏈接了。抓包結(jié)果也顯示8次后都是長連接,無socket重連無鑒 權(quán)。那么為什么有8個鏈接? 通過查看httpd.conf配置文件,是因為appache啟動了8個子進程:#StartServers:numbers of server processes to start StartServers8于是剛好在ocs這個persistent_id的連接池里面初始化8個連接,此后的請求就用這8個鏈接了。 接下來測試頁面跳轉(zhuǎn),拷貝一個php文件,建立連接的構(gòu)造函數(shù)的persistent_id還是用ocs。得到的結(jié)果是從一個連接換到 了另一個連接上(因為調(diào)用的A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 取土項目合作協(xié)議
- 二零二五年度供暖服務(wù)區(qū)域供熱設(shè)施維護合同
- 二零二五年度農(nóng)用耕地租賃與農(nóng)業(yè)品牌建設(shè)合同樣本
- 二零二五年度人力資源合同管理與企業(yè)文化建設(shè)3篇
- 法院的合同范本(2篇)
- 二零二五年度鐵路運輸保險代理合同
- 二零二五年度數(shù)據(jù)中心基礎(chǔ)設(shè)施建設(shè)總包配合費合同4篇
- 離子源及裝置項目融資渠道探索
- 2025版教育集團股權(quán)轉(zhuǎn)讓與教育產(chǎn)業(yè)投資合同3篇
- 2025至2030年中國透明無毒塑料粒數(shù)據(jù)監(jiān)測研究報告
- 2024年全國現(xiàn)場流行病學(xué)調(diào)查職業(yè)技能競賽考試題庫-上部分(600題)
- (一模)晉城市2025年高三年第一次模擬考試 物理試卷(含AB卷答案解析)
- 安徽省蚌埠市2025屆高三上學(xué)期第一次教學(xué)質(zhì)量檢查考試(1月)數(shù)學(xué)試題(蚌埠一模)(含答案)
- 醫(yī)院工程施工重難點分析及針對性措施
- 2025年春節(jié)安全專題培訓(xùn)(附2024年10起重特大事故案例)
- 2025年江蘇太倉水務(wù)集團招聘筆試參考題庫含答案解析
- 遼寧省沈陽名校2025屆高三第一次模擬考試英語試卷含解析
- 智研咨詢-2025年中國生鮮農(nóng)產(chǎn)品行業(yè)市場全景調(diào)查、投資策略研究報告
- 綜合布線類項目施工圖解(共21頁)
- 圓錐曲線方程復(fù)習(xí)
- 教科版九年級物理上冊期末考試(真題)
評論
0/150
提交評論