2012-02-17 2 views
5

CMS Я использую memcached по умолчанию, и я работаю над его расширением. Один ключ содержит массив пользовательской информации, такой как 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. Используйте отдельный ключ для каждой детали и get и set их отдельно.

Это лучше зависит от относительных размеров деталей, их схемы использования и того, насколько важно поддерживать согласованность.

. Или другой вариант - не использовать memcached и вместо этого использовать Redis, который расширяет простую модель ключевого значения, включая data types, включая hashes, которые поддерживают нужный тип обновлений.

+0

+1 Спасибо за ответ :) –

+0

Redis хэши, вы имели в виду, я думаю (http://redis.io/commands#hash) Похоже, они делают именно то, что требуется - они в основном ассоциативные массивы в Redis. –

+0

Спасибо Кэтрин за то, что я указал на свою ошибку. Я обновил ответ, как вы предложили. –

Смежные вопросы