Возврат значения хеш-хранилища внутри набора в Redis

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

//this is in Redis-CLI
//add the page and it's data to a hash
HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl

//then I add the page to my set
sadd pages pages:/myurl

Теперь я хочу вернуть значения внутри pages:/myurl, есть ли один вызов набора, который может сделать это для меня? Или что-то встроенное в node-redis, которое делает это?


person Jonathan Eustace    schedule 28.09.2014    source источник


Ответы (2)


Попробуйте использовать команду HGETALL, например:

HGETALL pages:/myurl

Отредактировано на основе комментария: Итак, взгляните на SORT, но помните о его сложности и след памяти:

127.0.0.1:6379> HMSET pages:/myurl url /myurl title myTitle description myDescription content myContent lang_mirror /frenchurl
OK
127.0.0.1:6379> SADD pages pages:/myurl
(integer) 1
127.0.0.1:6379> SORT pages BY nosort GET *->url GET *->title GET *->description GET *->content GET *->lang_mirror
1) "/myurl"
2) "myTitle"
3) "myDescription"
4) "myContent"
5) "/frenchurl"

Внимательно, вы можете изучить использование сценариев на стороне сервера Lua для этого.

person Itamar Haber    schedule 28.09.2014
comment
Я это видел, но это не то, что мне нужно. Мне нужно иметь возможность получить все мои хэши, например страницы:/myurl, страницы:/myurl2, страницы:/myurl3 и т. д., за один вызов, поэтому я хотел поместить все хэши своих страниц в набор. - person Jonathan Eustace; 28.09.2014

Вам нужно будет сделать как минимум 2 вызова: один для получения элементов набора, а затем еще один для получения всех хэшей, вот пример кода с использованием node-redis.

redis.smembers('pages', function(err, pages) {
    var multi = redis.multi();
    for(var i=0; i<pages.length; ++i) {
        multi.hgetall(pages[i]);
    }

    multi.exec(function(err, pageData) {
         console.log(pageData);
    });
});
person Barış Uşaklı    schedule 28.09.2014