Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPubSub;
- import redis.clients.jedis.Tuple;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- import java.util.Set;
- /**
- * Прототип для работы с очередью с приоритетами.
- */
- public class Main
- {
- static final JedisPool jedisPool = new JedisPool("127.0.0.1", 6378);
- static final String queueId = "SPS_QUEUE";
- public static void main(String[] args)
- {
- // Протестировать команды ZADD, ZRANGE, ZRANGEBYSCORE, ZPOPMAX
- // ZRANGE - просмотр элементов
- // ZRANGEBYSCORE - выдаёт список, упорядоченный по "весу" от наименьшего к наибольшему.
- // У очереди соответственно нужен какой-то ключ для идентификации.
- System.out.println("Start application.");
- subscribeForQueue();
- System.out.println("End application.");
- }
- static void subscribeForQueue()
- {
- // Подписка на очередь для соответствующей обработки поступившего сообщения.
- // Чтобы получать изменения по ключам необходимо после того, как в очередь что - то добавили делать publish/
- // Можно сконфигурировать Redis таким образом, чтобы на добавление он публиковал о том, что в нём произошли изменения.
- // Сконфигурировать можно по FAQ https://redis.io/topics/notifications
- final Scanner scan = new Scanner(System.in);
- JedisPubSub subs = new JedisPubSub()
- {
- @Override
- public void onPMessage(String pattern, String channel, String message)
- {
- System.out.println("Notification from channel: " + channel);
- System.out.println("Got message: " + message);;
- String notPoppedHeadOfQueue = lookForHeadOfQueueFromRedis();
- System.out.println("Not popped head from queue: " + notPoppedHeadOfQueue);
- String goPop = "";
- while (!goPop.equals("yes") && !goPop.equals("no"))
- {
- System.out.println("Wanna pop it? yes/no");
- goPop = scan.nextLine();
- }
- System.out.println("Ok");
- if (goPop.equals("yes"))
- {
- String poppedHeadOfQueue = popHeadOfQueueFromRedis();
- System.out.println("Popped head from queue: " + poppedHeadOfQueue);
- }
- }
- };
- Jedis jedis = jedisPool.getResource();
- System.out.println("Subscribe");
- jedis.psubscribe(subs, "__key*__:zadd");
- }
- static String popHeadOfQueueFromRedis()
- {
- // Получение элемента с наибольшим приоритетом с верхушки очереди.
- try (Jedis jedis = jedisPool.getResource())
- {
- Tuple maxElement = jedis.zpopmax(queueId);
- return maxElement.getElement();
- }
- }
- static String lookForHeadOfQueueFromRedis()
- {
- // Просмотр верхушки очереди.
- try (Jedis jedis = jedisPool.getResource())
- {
- List<String> setRange =
- new ArrayList<>(
- jedis.zrange(
- queueId,
- Integer.MIN_VALUE,
- Integer.MAX_VALUE));
- System.out.println("Gotted set: ");
- for (String element : setRange)
- System.out.println(element);
- return setRange.get(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement