2017-01-11 8 views
0

Я начинаю использовать Redis как кеш, и я не уверен в лучшей структуре для своего приложения. Общая структура ниже:Redis Cache с источниками данных, пользователями и запросами

enter image description here

Некоторые вещи, которые мне нужно, чтобы быть в состоянии сделать это:

  1. Промывка все для источника данных (все пользователи и все запросы).
  2. Очистка всего для конкретного пользователя (e.x: мне нужно будет удалить пользователя 1 и его запросы из источника данных 1 и источника данных 2).

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

Вариант 1 (Sets):

DataSource1 => user1, user2, user3, user4 
DataSource1:user1 => Query1, Query2, Query3 
DataSource1:user1:Query1 => Results 

Промывка все будет дорого, потому что я должен был бы найти все ключи, которые соответствуют user1 или DataSource1.

Частичный Вариант 2 (хэш):

users:user1 DataSource1:Query1 Results1 DataSource2:Query1 Results2 

Все еще не уверен, как промывочные источники данных или пользователи будут работать здесь.

Есть ли у кого-нибудь другие мысли/модификации?

ответ

1

На основе информации у меня был бы набор с DataSource -> Users и хэш для пользователей -> запросы. Таким образом, очистка пользователей просто удаляет хэш, а очистка источника данных (что вы, вероятно, меньше) - это цикл через набор и удаление пользователей, а затем удаление набора данных -> набор пользователей.

Если вы идете с первым вариантом наборов, то это будет больше операций при каждом запуске запросов от пользователей, но это действительно зависит от доступа к данным.

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

+1

Мне нравится это решение. Это чисто и просто. Благодаря! –

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

  • Нет связанных вопросов^_^