#node.js #redis
#node.js #redis
Вопрос:
Мне сказали использовать Redis для пользователей, прошедших проверку подлинности в моем приложении на Heroku, поэтому я решил подключиться сегодня. То, что я хочу сделать, это сохранить хэши пользователей в хранилище Redis следующим образом:
{
id:4532143215432,
username:'davejlong',
email:'dave@davejlong.com'
}
И затем я хочу иметь возможность поиска по имени пользователя или идентификатору. Возможно ли это каким-либо образом с Redis?
Я использую node.js модуль redis, который поддерживает любую команду redis https://github.com/mranney/node_redis
Ответ №1:
В @orangeoctopus usecae есть несколько проблем.
redis 127.0.0.1: 6379> Идентификатор HMSET: 4532143215432 имя пользователя davejlong emaildave@davejlong.com OK redis 127.0.0.1:6379> Пользователь HMSET: davejlong id 4532143215432 электронная почта dave@davejlong.com Хорошо
Это приведет к дублированию, подумайте о добавлении новых значений и удалении и обновлении.
Поэтому я предпочитаю это
SET user:davejlong 1
HMSET user:1 username davejlong email dave@davejlong.com
1) В случае имени пользователя
redis.get('user:davejlong',function(err,id){
console.log('User Id of @davejlong: ' id);
redis.hgetall('user:' id,function(err,user){
console.log('User Data: ' user);
})
})
2) В случае идентификатора
redis.hgetall('user:1',function(err,user){
console.log('User Data: ' user);
})
Комментарии:
1. Я уклонился от этого с помощью «Более компактного способа сделать это …», но был слишком ленив, чтобы напечатать его. 1
2. Извините, я пропустил момент, поскольку вы не добавляете возможность поиска по почте.
SET user:dave@davejlong.com 1
и вы можете найти по почте
Ответ №2:
Это так же просто, как запоминать каждого пользователя дважды. Один раз с ключом id и один раз с ключом имени пользователя.
Более компактный способ сделать это с точки зрения памяти — использовать имена пользователей для идентификаторов, поэтому ваш запрос имени пользователя будет выглядеть следующим образом: запрос по имени пользователя, получение идентификатора; ввод идентификатора, получение информации.
К сожалению, не существует хорошего способа, чтобы одни и те же фактические данные вводились двумя разными ключами.
Например, когда вы вставляете нового пользователя, а затем запрашиваете его:
redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong email dave@davejlong.com
OK
redis 127.0.0.1:6379> HMSET user:davejlong id 4532143215432 email dave@davejlong.com
OK
redis 127.0.0.1:6379> HGET id:4532143215432 username
"davejlong"
redis 127.0.0.1:6379> HGET user:davejlong id
"4532143215432"
redis 127.0.0.1:6379> HMGET user:davejlong email id
1) "dave@davejlong.com"
2) "4532143215432"
redis 127.0.0.1:6379> DEL user:davejlong
(integer) 1
redis 127.0.0.1:6379> DEL id:4532143215432
(integer) 1
Обратите внимание, что когда я создаю пользователя, я использую HMSET дважды. Теперь я могу запрашивать либо имя пользователя, либо идентификатор. Теперь мне также нужно удалить оба ключа.
Комментарии:
1. Не могли бы вы показать мне, как я мог бы сделать это в CLI? Я новичок во всем этом redis, поэтому я не уверен, использовать ли хэш, список и т. Д.
2. Здесь вы создаете дублирующиеся данные. Рассмотрим использование индексов.