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

Php 在Memcache中更新/设置缓存数组的元素,php,memcached,Php,Memcached,我使用的CMS默认实现memcached,我正在努力扩展它。一个键包含一系列用户信息,比如userstats\u id,还包含论坛帖子数量、他们喜欢的帖子数量等等信息。关键点如下所示: [userstats_1] => Array ( [forum_posts] => 178 [forum_likes] => 16 [forum_dislikes] => 0 [

我使用的CMS默认实现memcached,我正在努力扩展它。一个键包含一系列用户信息,比如
userstats\u 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是一个简单的键值存储,您无法修改或访问由单个键寻址的值的一部分

所以你有两个选择:

  • 执行您提到的“疯狂”操作:使用单个键存储数组,
    获取整个数组,修改一个元素,然后
    设置整个数组
  • 为每个零件使用一个单独的键,并将它们分别设置为
    get
    set
  • 哪个更好取决于零件的相对尺寸、使用模式以及保持一致性的重要性


    或者另一种选择是不使用memcached,而是使用Redis,它扩展了简单的键值模型,包括支持您想要的更新类型的键值模型。

    Redis散列,您的意思是,我猜()看起来它们完全符合要求——它们基本上是Redis中的关联数组。感谢Catherine指出我的错误。我按照你的建议更新了答案。