php memcached 是一個用于緩存大量數據的擴展,可以加快應用程序的運行速度,同時也減輕數據庫負擔。本文將從實例出發,介紹php memcached 在應用中的使用方法。
首先,在使用php memcached 之前,需要先安裝并啟動memcached 服務。安裝過程不再贅述,可參考memcached 官網教程。啟動memcached 服務的命令:
memcached -d -m 128 -p 11211 -u root
其中-d 表示以守護進程方式啟動,-m 表示最大分配內存為128M,-p 表示端口號為11211,-u 表示以root用戶身份啟動。
安裝啟動完成后,我們來看一個簡單的memcached 實例:
$mem = new Memcached(); $mem->addServer('localhost', 11211); $key = 'user_123456'; $user_info = $mem->get($key); if(empty($user_info)){ $user_info = getUserInfoById(123456); $mem->set($key, $user_info, 3600); // 緩存1小時 } var_dump($user_info);
以上代碼中,我們首先實例化了一個Memcached 對象,并指定了一個服務節點(本地主機,端口號11211)。接著,通過$key 來獲取緩存,如果緩存中不存在對應數據,則從數據庫中取出相關信息,并將其寫入緩存中。在將緩存數據存儲到memcached 中時,第三個參數表示緩存的有效時間(單位為秒),這里設置為1小時。最后,我們打印出$user_info 的值,進行驗證。
接下來,我們看一下如何處理緩存過期的情況。我們不可能每次操作都去查詢緩存中的數據是否已經過期,如果過期,則重新寫入數據。這樣做太耗費資源,效率也不高。因此,memcached 提供了回調函數的方式,在緩存過期后自動調用回調函數。代碼如下:
function handleExpired($memc, $key, $value){ $user_id = substr($key, 5); // 解析出用戶ID $user_info = getUserInfoById($user_id); $memc->set($key, $user_info, 3600); // 重新將數據寫入緩存 } $mem = new Memcached(); $mem->addServer('localhost', 11211); $key = 'user_123456'; $mem->getDelayed([$key], 'handleExpired'); // 其他需要執行的操作 $user_info = $mem->fetch(); var_dump($user_info);
以上代碼中,我們定義了一個handleExpired 回調函數,用于在緩存過期后重新從數據庫中獲取數據,并將其寫入緩存中。在調用memcached 中的getDelayed 方法時,第二個參數傳入的是回調函數名,當緩存過期時,會自動回調相應的函數。我們需要注意的是,在使用getDelayed 方法時,如果要同時執行其他操作,需要在執行getDelayed 方法前先緩存所有的數據,然后再調用fetch 方法來獲取。
另外,memcached 也支持分布式架構,可將數據分別存儲在多個節點中,從而提高并發訪問量。這一部分的內容留待讀者自行研究。
本文介紹了php memcached 的基本用法,主要涉及到的為:實例化memcached 對象、添加服務節點、緩存數據、緩存過期處理等方面。通過合理使用php memcached,我們可以加快應用程序的運行速度,并降低數據庫的壓力。