2013-02-16 3 views
3

Я преобразование моей старой системы управления пользователями на основе MySQL на Redis и столкнулся с несколькими проблем ...Redis система управления пользователями

Я использую комбинацию HASHs и ставят основания система.

Просто некоторые псевдо-код

let uid=incr user_id_counter 

    hset [email protected] user user:uid 
    hset user:uid email joe#dom.com 
    hset user:uid gender m 
    hset user:uid year_of_birth 1972 
    hset user:uid fav_band acdc 
    sadd maleUsers uid 
    sadd born1972Users uid 

на данный момент все хорошо, и я могу сделать поиск с помощью агломерата , например:

sinter maleUsers born1972 
or 
sinter femaleUsers born1980 

Это предполагает, что я делаю отдельный набор для каждый год birh

sad bornXXXX uid 

Это я могу желудка - но как бы я справился fav band? Наверняка, я бы не сделал набор для всех возможных групп?

В конце концов, я хотел бы быть в состоянии сделать детальные поиски, такие как,

sinter maleUsers born1980 genreRock genreMetal homeTownSydney 

Есть более сложный способ сделать реляционные запросы?

ответ

0

Но как бы я работал с fav-группой? Наверняка, я бы не сделал набор для всех возможных групп?

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

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

Есть ли более сложный способ выполнения реляционных запросов?

Да, используя реляционную базу данных вместо Redis. Если вы ищете реляционные запросы, почему бы не использовать СУБД? Что случилось с MySQL?

3

Я большой вентилятор или Redis. Но я боюсь, что ваш подход совершенно неправильный. Ваше основное хранилище для учетных данных пользователей должно по-прежнему являться традиционной RDBMS, и придерживаться MySQL - отличный способ сделать.

Базы данных NoSQL и, в частности, Redis, предназначены для других целей.

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

Вы можете использовать базы данных NoSQL на базе дисков (MongoDB, CouchDB, Cassandra и все те) для вашей базы данных пользователей, что является лучшим выбором, чем Redis, но я по-прежнему настоятельно рекомендую использовать для этого традиционные RDBMS. Вы хотите хранить наиболее важные данные в надежной системе на основе транзакций.

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