在PHP開發中,一個很常見的需求就是實現高性能的數據緩存。而Memcached是當下比較優秀和流行的緩存解決方案之一,同時,PHP也提供了一個Memcached的擴展模塊:Memcache。Memcache是在PHP 4中引入的,但是已經不再被支持和更新了,而Memcached擴展則是推薦的替代方案,同時支持PHP 5.6版本。
使用Memcached解決高并發并且數據隨時都在變化的場景非常適合(如大量訪問商品詳情頁)。以電商網站為例,如果對每個頁面請求都從數據庫中讀取數據,那么立刻就會導致數據庫壓力增大、響應速度變慢。另外,商品詳情頁的數據關聯寫的用例難以滿足人氣促銷等需求。而使用Memcached就可以避免這種情況,將商品信息全部讀取到內存中,再從內存中讀取,極大地減少了對數據庫的讀寫壓力。
我們可以通過在代碼中添加類似如下所示的簡單代碼來使用Memcached:
$memcache = new Memcached; $memcache->addServer('localhost', 11211); $result = $memcache->get('key'); if ($result) { echo '從緩存中讀取: '.$result; } else { $result = '從數據庫中讀取'; $memcache->set('key', $result, 3600); echo $result; }
以上就是一個簡單的為Memcached寫入緩存的例子。我們首先創建了一個Memcached實例,然后將其配置為與本地服務器上的Memcached實例進行通信。
其中addServer()方法會將當前實例添加到Memcached服務器中,參數'localhost'即為本地Memcached服務器地址,11211則是默認的Memcached端口號。同時,我們還需要提供一個緩存的鍵名,這個鍵名可以是任何唯一的標記,緩存時間如果沒有指定,則默認為0,代表永久緩存,如果指定了,則表示過期時間為3600秒。
在查詢緩存時,如果傳遞的鍵名在內存中存在,則get()方法會讀取緩存數據并將其返回。否則,我們就需要通過其他方式從原始數據源中獲取數據,并且將新的緩存寫入到Memcached中。
最后值得一提的是:當我們更新了數據源時,一定要記得刷新緩存。如果沒有及時更新緩存,Memcached中的緩存數據將會成為過時數據。