Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.01 KB | None | 0 0
  1. import redis.clients.jedis.Jedis;
  2. import redis.clients.jedis.JedisPool;
  3. import redis.clients.jedis.JedisPubSub;
  4. import redis.clients.jedis.Tuple;
  5.  
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Scanner;
  9. import java.util.Set;
  10.  
  11. /**
  12.  * Прототип для работы с очередью с приоритетами.
  13.  */
  14. public class Main
  15. {
  16.     static final JedisPool jedisPool = new JedisPool("127.0.0.1", 6378);
  17.     static final String queueId = "SPS_QUEUE";
  18.  
  19.     public static void main(String[] args)
  20.     {
  21.         // Протестировать команды ZADD, ZRANGE, ZRANGEBYSCORE, ZPOPMAX
  22.         // ZRANGE - просмотр элементов
  23.         // ZRANGEBYSCORE - выдаёт список, упорядоченный по "весу" от наименьшего к наибольшему.
  24.         // У очереди соответственно нужен какой-то ключ для идентификации.
  25.  
  26.         System.out.println("Start application.");
  27.         subscribeForQueue();
  28.         System.out.println("End application.");
  29.     }
  30.  
  31.     static void subscribeForQueue()
  32.     {
  33.         // Подписка на очередь для соответствующей обработки поступившего сообщения.
  34.         // Чтобы получать изменения по ключам необходимо после того, как в очередь что - то добавили делать publish/
  35.         // Можно сконфигурировать Redis таким образом, чтобы на добавление он публиковал о том, что в нём произошли изменения.
  36.         // Сконфигурировать можно по FAQ https://redis.io/topics/notifications
  37.  
  38.         final Scanner scan = new Scanner(System.in);
  39.  
  40.         JedisPubSub subs = new JedisPubSub()
  41.         {
  42.             @Override
  43.             public void onPMessage(String pattern, String channel, String message)
  44.             {
  45.                 System.out.println("Notification from channel: " + channel);
  46.                 System.out.println("Got message: " + message);;
  47.  
  48.                 String notPoppedHeadOfQueue = lookForHeadOfQueueFromRedis();
  49.  
  50.                 System.out.println("Not popped head from queue: " + notPoppedHeadOfQueue);
  51.  
  52.                 String goPop = "";
  53.                 while (!goPop.equals("yes") && !goPop.equals("no"))
  54.                 {
  55.                     System.out.println("Wanna pop it? yes/no");
  56.                     goPop = scan.nextLine();
  57.                 }
  58.  
  59.                 System.out.println("Ok");
  60.  
  61.                 if (goPop.equals("yes"))
  62.                 {
  63.                     String poppedHeadOfQueue = popHeadOfQueueFromRedis();
  64.                     System.out.println("Popped head from queue: " + poppedHeadOfQueue);
  65.                 }
  66.             }
  67.         };
  68.  
  69.         Jedis jedis = jedisPool.getResource();
  70.  
  71.         System.out.println("Subscribe");
  72.         jedis.psubscribe(subs, "__key*__:zadd");
  73.     }
  74.  
  75.     static String popHeadOfQueueFromRedis()
  76.     {
  77.         // Получение элемента с наибольшим приоритетом с верхушки очереди.
  78.         try (Jedis jedis = jedisPool.getResource())
  79.         {
  80.             Tuple maxElement = jedis.zpopmax(queueId);
  81.             return maxElement.getElement();
  82.         }
  83.     }
  84.  
  85.     static String lookForHeadOfQueueFromRedis()
  86.     {
  87.         // Просмотр верхушки очереди.
  88.         try (Jedis jedis = jedisPool.getResource())
  89.         {
  90.             List<String> setRange =
  91.                 new ArrayList<>(
  92.                     jedis.zrange(
  93.                         queueId,
  94.                         Integer.MIN_VALUE,
  95.                         Integer.MAX_VALUE));
  96.  
  97.             System.out.println("Gotted set: ");
  98.  
  99.             for (String element : setRange)
  100.                 System.out.println(element);
  101.  
  102.             return setRange.get(0);
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement