优先队列也是一种非常常见的数据结构,跟队列类似,只是队列中元素有优先级,根据优先级来进行排序。
redis中可以使用zset来实现优先队列。
package com.foxbill.redisinaction;
import redis.clients.jedis.Jedis;
import java.util.List;
/**
* 优先队列
*/
public class Chapter29 {
static private String KEY_QUEUE = "Chapter29:queue";
static public void start(Jedis jedis) {
cleanData(jedis);
for (int i = 0; i < 10; i++) {
add(jedis,"item:"+String.valueOf(i),i);
}
String item = pop_max(jedis);
System.out.printf("poped max item:%s\n", item);
item = pop_min(jedis);
System.out.printf("poped min item:%s\n", item);
}
//清除数据
private static void cleanData(Jedis jedis) {
jedis.del(KEY_QUEUE);
}
//添加指定优先级的元素到优先队列
private static void add(Jedis jedis,String item,double priority) {
jedis.zadd(KEY_QUEUE,priority, item);
}
//弹出优先级最小的元素
private static String pop_min(Jedis jedis) {
List<String> zrange = jedis.zrange(KEY_QUEUE, 0, 0);
String item = zrange.get(0);
jedis.zrem(KEY_QUEUE, item);
return item;
}
//弹出优先级最大的元素
private static String pop_max(Jedis jedis) {
List<String> zrange = jedis.zrange(KEY_QUEUE, -1, -1);
String item = zrange.get(0);
jedis.zrem(KEY_QUEUE, item);
return item;
}
}

被折叠的 条评论
为什么被折叠?



