Статьи

Использование отсортированных наборов с Jedis API

В предыдущем посте мы начали изучать Jedis API Java Redis Client. В этом посте мы рассмотрим отсортированный набор (zsets).

Sorted Set работает как Set, так как не допускает дублирования значений. Большая разница в том, что в Sorted Set каждый элемент имеет оценку, чтобы сохранить элементы отсортированными.

Мы можем увидеть некоторые команды ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.HashMap;
import java.util.Map;
 
import redis.clients.jedis.Jedis;
public class TestJedis {
 
public static void main(String[] args) {
 String key = "mostUsedLanguages";
 Jedis jedis = new Jedis("localhost");
 //Adding a value with score to the set
 jedis.zadd(key,100,"Java");//ZADD
 
 //We could add more than one value in one calling
 Map<Double, String> scoreMembers = new HashMap<Double, String>();
 scoreMembers.put(90d, "Python");
 scoreMembers.put(80d, "Javascript");
 jedis.zadd(key, scoreMembers);
 
 //We could get the score for a member
 System.out.println("Number of Java users:" + jedis.zscore(key, "Java"));
 
 //We could get the number of elements on the set
 System.out.println("Number of elements:" + jedis.zcard(key));//ZCARD
 }
}

В приведенном выше примере мы видели несколько команд Zset. Чтобы добавить элементы в zet, мы устанавливаем метод zadd , различие для наборов состоит в том, что мы также передаем оценку за элемент. Есть перегруженная версия, в которую мы можем передать много значений, используя карту. Zadd может использоваться как для добавления, так и для обновления оценки для существующего элемента.

Мы можем получить оценку для данного элемента с помощью zscore и количества элементов, используя команду zcard .

Ниже мы видим другие команды из zsets:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Set;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
public class TestJedis {
 
public static void main(String[] args) {
 String key = "mostUsedLanguages";
 Jedis jedis = new Jedis("localhost");
 
 //get all the elements sorted from bottom to top
 System.out.println(jedis.zrange(key, 0, -1));
 
 //get all the elements sorted from top to bottom
 System.out.println(jedis.zrevrange(key, 0, -1));
 //We could get the elements with the associated score
 Set<Tuple> elements = jedis.zrevrangeWithScores(key, 0, -1);
 for(Tuple tuple: elements){
 System.out.println(tuple.getElement() + "-" + tuple.getScore());
 }
 
 //We can increment a score for a element using ZINCRBY
 System.out.println("Score before zincrby:" + jedis.zscore(key, "Python"));
 //Incrementing the element score
 jedis.zincrby(key, 1, "Python");
 System.out.println("Score after zincrby:" + jedis.zscore(key, "Python"));
 }
}

С помощью Zrange мы можем получить элементы для данного диапазона. Возвращает элементы, отсортированные снизу вверх. Мы можем получить элементы сверху вниз, используя метод zrevrrange . Redis также позволяет нам получить элементы с соответствующими баллами. В Redis мы передаем опцию «с баллами ». В Jedis API мы используем метод zrevrangeWithScores, который возвращает набор объектов Tuple. Другой полезной командой является команда, которая позволяет увеличить счет для члена в наборе.

Существуют и другие команды для zsets, этот пост был предназначен только для демонстрации базового использования с Jedis API. Мы можем найти хороший пример использования отсортированных наборов в этом посте .

Увидимся в следующем посте.

Ссылка: Использование отсортированных наборов с Jedis API от нашего партнера JCG Франсиско Рибейру Младшего в блоге XICO JUNIOR’S WEBLOG .