2013-11-28 2 views
2

Допустим, у меня есть эти пары в Redis:Redis: Сортировка и получить п Сосед Ключи

1237.56 "John" 
1224.59 "Robert" 
1213.34 "Mahmoud" 
1242.90 "George" 
1020.11 "Mary" 
1723.09 "Jay" 
1589.77 "Khan" 
1106.62 "Albert" 

Клавиши всегда десятичное число. При предоставлении номера я хотел бы получить два ключа в обоих направлениях с самым близким номером.

Например, если я ищу соседей 1242, то должны иметь ResultSet:

1224.59 "Robert" 
1237.56 "John" 
1242.90 "George" 
1589.77 "Khan" 

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

ответ

3

Да и не в одно и то же время.

Почему да? Только один тип данных redis - SORTED SET позволяет вам получить диапазон значений на основе десятичного числа. Таким образом, с ZRANGEBYSCORE вы можете получить значения по диапазону баллов.

ZRANGEBYSCORE theKey 1220 1600 

Дает вам набор данных для поиска.

Почему нет? На ваш вопрос ваш вопрос о соседях счёта. ZRANGEBYSCORE может получать значения от минимального балла до максимального балла, но не «получать значения X меньше заданных» или «значения X, большие, чем заданные».

+0

Спасибо. Это указывает мне направление. – Nirmal

0

Этот является возможно с использованием zrangebyscore с предельным параметром. Вам нужно будет сделать два запроса - один для получения соседей с каждой стороны.

Например, если вы хотите получить n со счетом менее score запрос выглядит следующим образом:

zrangebyscore KEY <SCORE> +inf limit 0 <N> 

И в n набравшие больше, чем, как это:

zrevrangebyscore KEY +inf <SCORE> limit 0 <N> 

Скажите, что вы отсортировали test:key_sort вот так:

"a": 10 
"b": 20 
"c": 30 
"d": 40 
"e": 50 

Затем zrevrangebyscore test:key_sort +inf 25 limit 0 2 возвращает d, c и zrangebyscore test:key_sort -inf 25 limit 0 2 возвращает a, b

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