2011-11-25 51 views
2

我必須在PHP中創建一個應用程序,它將存儲不同用戶的手機聯繫人。memcache技巧 - 選擇理想的密鑰

用於存儲電話號碼錶的格式如下:

id,user-id,phone-number 

每當一個用戶試圖查看他的所有聯繫人,首先從緩存中的內容應該顯示,然後將剩餘的來自數據庫。

在實現這一點,我有以下問題:

如何將電話號碼存儲在緩存中?我的意思是將電話號碼插入memcache的關鍵是什麼,以便我可以輕鬆地從任何用戶那裏提取數據。請記住,每個用戶可以有很多電話號碼,並且有很多用戶。

回答

1

密鑰應該使用的用戶id

user id { mobile number ... + list of contact ...[which is the user id]} 
// by accessing this key able to get all mobile number 
// and his contact list 

建議值應儘可能簡單,
沒有JSON,沒有串行化數據

user id {m:xxx,xxxx..., c:yyy,yyy,yyy} 

這是爲了節省空間,並且還節省處理對於json_decode/unserailize

當獲取用戶的所有聯繫人時

1. fetch cache using user id (one call) 
2. iterate the list of contact 
3. fetch parellel of all the contact (user) key * function handling 
4. iterate to build a multi dimensional array 

當用戶添加/更新/刪除手機號碼,
或添加/更新/刪除手機號碼

1. fetch cache using user id (one call) 
2. expire the key using user id 
3. iterate the cache result 

你的功能應該是,如果內存緩存中不存在緩存,
從取數據庫,
set memcache,
返回數據庫結果

+0

爲特定用戶添加新號碼時,是否需要刪除該用戶ID的緩存條目,然後添加新列表?同樣對於刪除,我應該從緩存中刪除整個條目並添加該ID的新列表? –

+0

是的,對用戶所做的任何更改,都需要將其緩存過期以保持數據的新鮮度。一旦找不到緩存,從數據庫獲取,將其設置爲memcache – ajreal

0

緩存密鑰格式應該是

12_contacts其中12是用戶ID。

在密鑰內部,您可以將該用戶的聯繫人的完整列表作爲數組存儲。通常這意味着只要用戶聯繫人發生變化,您就可以清除或重建memcache密鑰。您需要將完整的聯繫人列表作爲數組存儲在密鑰中,存儲部分列表,然後查詢其他人是否會破壞目的。

+0

但是,如果用戶有太多的聯繫人,以適應1MB空間來存儲t他重視對應一把鑰匙,那該怎麼辦? –

+0

購買更多硬盤空間。 memcache的用途是速度,memcache需要驅動器空間。 – Julien