Обновить / установить элемент кэшированного массива в Memcache - PullRequest
5 голосов
/ 17 февраля 2012

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'
    )

Itбыло бы лучше, если бы я мог иметь это в [userstats_1], что, конечно, имеет больше смысла.Итак, учитывая также, что это меняется намного чаще, чем остальные элементы этого кэшированного массива, как лучше всего получить и установить элементы кэшированного массива?

Единственное единственноеЯ придумал, как скопировать массив, манипулировать им, а затем заново установить его в кеше, но это кажется сумасшедшим.Спасибо!

1 Ответ

5 голосов
/ 18 ноября 2013

Нет, к сожалению, поскольку memcached - это простое хранилище значений ключей, которое нельзя изменить или получить доступ только к части значения, адресуемой одним ключом.

Таким образом, у вас есть два варианта:

  1. Сделайте «сумасшедшую» вещь, которую вы упомянули: используйте один ключ для хранения массива, get весь массив, измените один элемент, а затем set весь массив.
  2. Используйте отдельный ключдля каждой детали и get и set их отдельно.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...