Как отсортировать хэш в Redis по его значению
Я новичок в этом Redis, поэтому, пожалуйста, помогите мне! Я храню значения в Redis с помощью этой команды,
client.hmset('top_trend', array[0], 0);
client.expire('top_trend', 86400, redis.print);
и я увеличу значение "0", если попытаюсь снова установить тот же ключ с помощью этой команды,
if(client.hexists('top_trend', array[0]) == true){
client.hincrby('top_trend', array[0] , 1, redis.print);
}
Это сохранит мой массив данных в redis, например: key = "top_trend"
"tamil"
"0"
"english"
"0"
"hindi"
"0"
если тамиль уже доступен для ключа "top_trend", он будет увеличивать свое значение следующим образом:
"tamil"
"1"
"english" (//if english is already 3 times available)
"4"
Теперь мне нужно отсортировать значения: в порядке убывания и получить значения в отсортированном порядке в узле js. Как этого добиться.?? Я попытался отсортировать key_value по объекту _*-> команду объекта, как это. Но это не сработает. Помоги мне.
2 ответа
Чтобы ответить на ваш вопрос - Redis не предоставляет способ извлечения содержимого хэша, упорядоченного по значению. Что вы можете сделать, при условии, что хэш имеет малый размер, это извлечь его полностью, а затем отсортировать в приложении (Node.js).
Кроме того, к вашему сведению, кажется, что ваш код несколько лишний - HINCRBY
инициализирует поле, даже если оно не существует, поэтому:
127.0.0.1:6379> EXISTS foo
(integer) 0
127.0.0.1:6379> HINCRBY foo bar 1
(integer) 1
127.0.0.1:6379> HGETALL foo
1) "bar"
2) "1"
Это означает, что если у вас нет веских причин для инициализации и проверки существования "вручную", вы можете просто удалить этот код.
Если упорядочение по некоторому значению является функцией, необходимой для вашей реализации, вы можете подумать о том, чтобы сделать это с помощью отдельного ключа Redis. Вы можете легко использовать Сортированные Наборы для этого, увеличивая счет с ZINCRBY
, Более того, таким образом, вы также можете использовать лексикографическое упорядочение сохраненных значений.