2012-02-17 57 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