一、簡介及安裝
memcached是一個高效能分散式的記憶體物件快取系統, 通常被用於降低資料庫載入壓力以提高動態web應用的反應速度。
此擴充功能使用了libmemcached函式庫提供的api與memcached服務端進行互動。它還提供了一個session處理器(memcached)。
關於memcached的安裝,可參考這篇文章:Ubuntu中memcached的安裝和配置。
在安裝php擴充memcached之前,需要先安裝libmemcached,libmemcached是memcached的C/C++本機客戶端程式庫。
安裝libmemcached之前,還要先安裝libcloog-ppl0,否則編譯安裝過程中會出錯:
sudo apt-get install libcloog-ppl0
然後從這裡http://libmemcached.org/libMemcached.html下載所需的libmemcacheded碼安裝包,解壓縮源到指定目錄,進入目錄,然後執行以下指令:
./configure --prefix=/usr/local/libmemcached make sudo make install
然後就可以進行php的memcached擴充功能的安裝了,從這裡下載所需的源碼安裝包:http://pecl.php.net/package/memcached ,解壓縮到指定目錄,進入該目錄,然後執行以下指令:
phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached make sudo make install
在安裝過程中可能會報錯:
未知类型名称:memcached_server_instance_st
而導致make失敗,解決方法如下:
在memcached擴展解壓目錄下找到這個檔案: php_libmemcached_compat.h,然後在其中加入下面這行
typedef const struct memcached_server_st *memcached_server_instance_st;
再一次make,就OK了。
安裝成功後,在php.ini中加入extension=memcacached,然後重啟apache,查看phpinfo,看到以下部分
證明安裝成功。
二、超時時間
一些儲存命令在發送時會包含一個失效值(與一個元素或一個客戶端操作請求相關)到服務端。所有這類用法,實際發送的值可以 是一個Unix時間戳(自1970年1月1日起至失效時間的整數秒數),或者是一個從現在算起的以秒為單位的數字。對於後一種情況,這個秒數不能超過60×60×24×30(30天時間的秒數);如果失效的值大於這個值, 服務端會將其作為一個真實的Unix時間戳來處理而不是自當前時間的偏移。
如果失效值被設定為0(預設),此元素永不過期(但是它可能由於服務端為了給其他新的元素分配空間而被刪除)。
三、回呼
1.結果回呼
Result callbacks方式在透過 Memcached::getDelayed()或Memcached::getDelayedBykey()方法取得元素後,為結果集中每個元素呼叫一次。 回呼函數可以接收到Memcached物件合一個陣列描述的元素訊息,此回呼函數不需要傳回任何訊息。
Example #1 結果回呼範例
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $items = array( 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' ); $m->setMulti($items); $m->getDelayed(array('key1', 'key3'), true, 'result_cb'); function result_cb($memc, $item) { var_dump($item); } ?>
以上程式的輸出類似:
array(3) { ["key"]=> string(4) "key1" ["value"]=> string(6) "value1" ["cas"]=> float(49) } array(3) { ["key"]=> string(4) "key3" ["value"]=> string(6) "value3" ["cas"]=> float(50) }
2.通讀快取回呼
通讀快取回呼在一個元素沒有從服務端檢索到的時候被呼叫。這個回呼函數會接收到Memcached對象,請求的key以及 一個引用方式傳遞的值變數等三個參數。此回調函數負責透過傳回true或false來決定在key沒有值時設定一個預設值。 如果回呼回傳true,Memcached會儲存"傳出參數"(引用傳遞的值變數)儲存的值到memcached服務端並將其傳回原來 的呼叫函數中。僅 Memcached::get()和 Memcached::getByKey() 支援這類回調,因為Memcache協定不支援在請求多個key時提供未擷取到key的資訊。
Example #2 通讀回呼範例
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $profile_info = $m->get('user:'.$user_id, 'user_info_cb'); function user_info_cb($memc, $key, &$value) { $user_id = substr($key, 5); /* 从数据库读取个人信息 */ /* ... */ $value = $profile_info; return true; } ?>
四、Sessions支援
memcached提供了一個自訂的session處理器可以用於儲存使用者session資料到memcached服務端。 一個完全獨立的memcached實例將會在內部使用,因此如果需要您可以設定一個不同的伺服器池。 session的 key被儲存在前綴memc.sess.key.之下,因此, 如果你對session和通常的快取使用了 同樣的伺服器池,請注意這一點。 譯註:另外一個session和通常緩存分離的原因是當通常的緩存佔滿了memcached服務端後,可能會導致你的session被 從緩存中踢除,導致用戶莫名的掉線。
session.save_handler 設定為memcached開啟memcached的session處理器。 session.save_path定義一個逗號分隔的hostname:port樣式的session快取伺服器池,例如: "sess1:11211, sess2:11211".
五、Memcached類別
表徵到memcached服務叢集的連線。
Memcached::add — 增加一個新的key下方一個元素
Memcached::addByKey — 在指定伺服器上的一個新的key下方增加一個元素
Memcached::addServer — 新增一個伺服器池
Memcached::addServers — 在伺服器池中增加多台伺服器
Memcached::append — 在已存在元素後追加資料
Memcached::appendByKey:: — 向指定伺服器上已存在元素後追加cas — 比較並交換值
Memcached::casByKey — 在指定伺服器上比較並交換值
Memcached::__construct — 建立一個Memcacheded
Meached::decrement — 建立一個Memcached decrementByKey — Decrement numeric item's value, stored on a specific server
Memcached::delete — 刪除一個元素
Memcached::deleteByKeycm— 從指定的伺服器中刪除一個元素
Memcached::deleteByKeycm— 從指定的伺服器」中刪除一個元素 是 mhididid遠
Memcached: :deleteMultiByKey — Delete multiple items from a specific serverMemcached::fetch — 抓取下一個結果Memcached::fetchAll — 抓取所有剩餘的結果Memcached::fetchAll — 抓取所有剩餘的結果Memcached::fetchAll — 抓取所有剩餘的結果。 Memcached::get — 檢索一個元素Memcached::getAllKeys — Gets the keys stored on all the serversMemcached::getByKey — 從特定的伺服器檢索::getDelayedByKey — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 從指定的伺服器上請求多個元素Memcached::getMulti — 檢索多個元素Memcached::getMultiByKey — 從特定伺服器擷取多個元素Meached
Memcached::getResultCode — 傳回上次作業的結果代碼
Memcached::getResultMessage — 傳回最後一次作業的結果描述訊息
Meached::getServerBy7835 — 取得伺服器集區中的伺服器清單
Memcached::getStats — 取得伺服器集的統計資料
Memcached::getVersion — 取得伺服器集區中所有伺服器的版本資訊
Memcached::increment
Memcached::incrementByKey — Increment numeric item's value, stored on a specific serverMemcached::isPersistent — Check if a persitent connection to meache is 3hed cently createdMemcached ::prepend — 向一個已存在的元素前面追加資料Memcached::prependByKey — Prepend data to an existing item on a specific serverMe.存在key下的元素Memcached::replaceByKey — Replace the item under an existing key on a specific serverMemcached::resetServerList — Clears all servers from the server list listg ::setByKey — Store an item on a specific serverMemcached::setMulti — 儲存多個元素Memcached::setMultiByKey — Store multiple items on a specjached::setMultiByKey — Store multiple items on a specspecached mc1ed ached ::setOptions — Set Memcached optionsMemcached::setSaslAuthData — Set the credentials to use for authenticationMemcached::ouch — Set a new expiration on an 5,mcached::ouch — Set a item on a specific server
使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。