國內外有很多基於Memcached開發的產品,這些產品支持所有Memcached的協議,同時側重不同的應用場景,可以根據自己的應用需求選擇合適的Memcached變種。下面分別介紹幾種Memcached的變種產品。
1. memcachedb
memcachedb是新浪網基於Memcached開發的一個開源項目。通過爲Memcached增加Berkeley DB的持久化存儲機制和異步主輔複製機制,使Memcached具備了事務恢復能力、持久化能力和分佈式複製能力,非常適合需要超高性能讀寫速度、持久化保存的應用場景,例如,將memcachedb應用於新浪博客的管理。如果對Memcached有持久化需求,可以考慮使用memcachedb。
2. repcached
repcached是日本人開發的基於Memcached的一個patch,實現Memcached的複製功能,它支持多個Memcached之間相互複製,可以解決Memcached的容災問題。有cache容災需求的可以嘗試使用這一功能。
3. memcached_functions_mysql
這個功能相當於MySQL的UDFs(User Defined Functions),在MySQL中通過觸發器更新Memcached。這樣可以做到把數據寫入MySQL,然後從Memcached獲取數據,以減輕數據庫的壓力,同時減少很多開發的工作量。
關於memcached_functions_mysql的使用和經驗會在下一節進行詳細介紹。
4. memcacheQ
memcacheQ在Memcached的基礎上實現了消息隊列。下面以PHP客戶端爲例介紹memcacheQ實現消息隊列的方式。
消息從尾部入棧:memcache_set
消息從頭部出棧:memcache_get
memcacheQ最大的優勢是:它是基於Memcached開發的,可以通過各種Memcached命令對它進行操作。基於Memcached開發的應用完全不需要做任何修改。
memcacheQ應用於數據庫的多機房分佈式部署環境,數據庫分佈在各地,各自寫各自的數據庫,同時寫入本地的memcacheQ,本地的memcacheQ通過調度程序(需要自己開發)把數據從memcacheQ中讀取出來,然後寫入其他機房的數據庫主庫,最終使每個機房的數據庫數據一致。如圖3-14所示爲memcacheQ在兩個機房的部署情況。
圖3-14 memcacheQ在數據庫的多機房分佈式部署環境中的結構 |