трюк с memcache - выбор идеального ключа - PullRequest
2 голосов
/ 25 ноября 2011

Мне нужно создать приложение на PHP, в котором будут храниться телефонные контакты разных пользователей.

Таблица для хранения телефонных номеров имеет следующий формат:

id,user-id,phone-number

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

При реализации этого у меня возникает следующая проблема:

Как хранить номера телефонов в кеше?Под этим я подразумеваю, что должно быть ключом для вставки телефонных номеров в memcache, чтобы я мог легко извлечь данные из него для любого пользователя.Помните, что у каждого пользователя может быть много телефонных номеров и много пользователей.

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

ключ должен использовать идентификатор пользователя

user id { mobile number ... + list of contact ...[which is the user id]} 
// by accessing this key able to get all mobile number
// and his contact list

значение предложения должно быть максимально простым,
нет JSON, нет сериализации данных

user id {m:xxx,xxxx..., c:yyy,yyy,yyy}

это для экономии места, а также для сохранения обработки для json_decode / unserailize

при получении всех контактов для пользователя

1. fetch cache using user id (one call)
2. iterate the list of contact
3. fetch parellel of all the contact (user) key * function handling
4. iterate to build a multi dimensional array

когда пользователь добавляет / обновляет / удаляет номер мобильного телефона,
или добавление / обновление / удаление номера мобильного телефона

1. fetch cache using user id (one call)
2. expire the key using user id
3. iterate the cache result

ваша функция должна быть, если кеш не существует в memcache,
выборка из базы данных,
установить memcache,
вернуть результат базы данных

0 голосов
/ 25 ноября 2011

формат ключа кэша должен быть

12_contacts где 12 - идентификатор пользователя.

внутри ключа вы сохраняете полный список контактов для этого пользователя в виде массива. Как правило, это означает, что при изменении контактов пользователя вы либо очищаете, либо перестраиваете ключ memcache. вам нужно сохранить полный список контактов внутри ключа в виде массива, сохранить частичный список, а затем запросить другие, что противоречит цели.

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