在Memcache中更新/设置缓存数组的元素


Update/set an element of a cached array in Memcache

我使用的CMS默认实现memcached,我正在努力扩展它。一键包含一组用户信息,如userstats_id,并包含论坛帖子数、他们喜欢的帖子数等信息。钥匙看起来是这样的:

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

我正在扩大这个密钥的使用范围,因为我还想存储用户正在浏览的特定论坛,例如:

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

如果我能把它放在[userstats_1]中会更好,因为这当然更有意义。因此,考虑到这种变化比缓存数组的其他元素更频繁,获取和设置缓存数组的元素的最佳方法是什么?

我想到的唯一方法是复制数组,操纵它,然后在缓存中重新设置它,但这似乎很疯狂。谢谢

否,不幸的是,因为memcached是一个简单的键值存储,所以您不能仅修改或访问由单个键寻址的值的一部分。

所以你有两个选择:

  1. 做你提到的"疯狂"的事情:使用单个键存储数组,get存储整个数组,修改一个元素,然后set存储整个数组
  2. 对每个部件使用单独的密钥,并分别使用getset

哪个更好取决于零件的相对尺寸、使用模式以及保持一致性的重要性。

或者另一种选择是不使用memcached,而是使用Redis,它扩展了简单的键值模型,以包括数据类型,包括支持所需更新类型的哈希。