2012-02-17 58 views
5

我使用的默認實現memcached的CMS,我正在努力擴展它。一鍵包含一組用戶信息,如userstats_id,包含論壇帖子數量,他們喜歡的帖子數量等等信息。關鍵是這樣的:在Memcache中更新/設置緩存數組的元素

[userstats_1] => Array 
     (
      [forum_posts] => 178 
      [forum_likes] => 16 
      [forum_dislikes] => 0 
      [now_online] => 1 
     ) 

我擴大這個鍵的使用,因爲我也想存儲其特定的論壇用戶瀏覽,如:

[userstats_forumbrowsing_1] => Array 
    (
     [forum_browsing] => 'Foobar' 
    ) 

這將是更好的,如果當然,我可以在[userstats_1]中使用它,這樣做更有意義。因此,也給出了這種變化比緩存陣列的其他元素更頻繁得多,獲取並設置緩存陣列的元素的最佳方式是什麼?

我想出的唯一方法是複製數組,操作它然後重新設置它在緩存中,但這看起來很瘋狂。謝謝!

回答

5

不,不幸的是,因爲memcached是一個簡單的鍵值存儲,您不能修改或訪問僅由單個鍵尋址的值的一部分。

所以,你有兩個選擇:

  1. 你提到了「瘋狂」的事情:使用一個鍵存儲陣列,get整個陣列,修改一個元素,然後set整個數組。
  2. 分別爲每個零件使用一個單獨的密鑰,並分別使用它們getset

哪個更好取決於零件的相對尺寸,它們的使用模式以及保持一致性的重要性。

或者另一種選擇是不使用memcached,而是使用Redis,它將簡單鍵值模型擴展爲包括data types,包括hashes,它們支持所需的更新類型。

+0

+1感謝您的回答:) – 2014-10-23 16:41:42

+0

Redis哈希,你的意思是,我猜(http://redis.io/commands#hash)看起來他們確實需要 - 它們基本上是Redis中的關聯數組。 – 2016-11-15 11:42:44

+0

謝謝凱瑟琳指出我的錯誤。我按照你的建議更新了答案。 – 2016-11-16 05:41:34