jedis 排序 zrangeByScorezrevrangeByScore

it2022-05-09  22

import java.io.Serializable; public class User implements Serializable { private String id; //编号 private String name; //姓名 private double score; //得分 private int rank; //排名 public User(String id, String name, double score) { this.id = id; this.name = name; this.score = score; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public int getRank() { return rank; } public void setRank(int rank) { this.rank = rank; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", score=" + score + ", rank=" + rank + "]"; } }

 

 

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SerializeUtil { private static final Logger logger = LoggerFactory .getLogger(SerializeUtil.class); public static byte[] serialize(Object value) { if (value == null) { throw new NullPointerException("Can't serialize null"); } byte[] rv = null; ByteArrayOutputStream bos = null; ObjectOutputStream os = null; try { bos = new ByteArrayOutputStream(); os = new ObjectOutputStream(bos); os.writeObject(value); os.close(); bos.close(); rv = bos.toByteArray(); } catch (IOException e) { } finally { close(os); close(bos); } return rv; } public static Object deserialize(byte[] in) { Object rv = null; ByteArrayInputStream bis = null; ObjectInputStream is = null; try { if (in != null) { bis = new ByteArrayInputStream(in); is = new ObjectInputStream(bis); rv = is.readObject(); is.close(); bis.close(); } } catch (Exception e) { } finally { close(is); close(bis); } return rv; } public static void close(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (Exception e) { } } } } public static void main(String[] args) { JedisUtil jt = JedisUtil.getInstance(); //获取jedis对象类 redis.clients.jedis.Jedis jedis = jt.getJedis(); User user1 = new User("1", "测试1", 91.9); User user2 = new User("2", "测试2", 95.8); User user3 = new User("3", "测试3", 94.8); User user4 = new User("4", "测试4", 93.8); User user5 = new User("5", "测试5", 92.6); User user6 = new User("6", "测试6", 91.0); User user7 = new User("7", "测试7", 100.0); User user8 = new User("8", "测试8", 10); byte[] key = "game".getBytes(); /** 按分数排序,设置的时候, 第一个参数是redis的key, 第二个参数是需要排序的分数 , 第三个参数为序列号后的对象*/ jedis.zadd(key, user1.getScore(), SerializeUtil.serialize(user1)); jedis.zadd(key, user2.getScore(), SerializeUtil.serialize(user2)); jedis.zadd(key, user3.getScore(), SerializeUtil.serialize(user3)); jedis.zadd(key, user4.getScore(), SerializeUtil.serialize(user4)); jedis.zadd(key, user5.getScore(), SerializeUtil.serialize(user5)); jedis.zadd(key, user6.getScore(), SerializeUtil.serialize(user6)); jedis.zadd(key, user7.getScore(), SerializeUtil.serialize(user7)); jedis.zadd(key, user8.getScore(), SerializeUtil.serialize(user8)); Set<byte[]> set = jedis.zrangeByScore(key, 10, 130);//分数从小到大 执行后的结果看下图 1 // Set<byte[]> set = jedis.zrevrangeByScore("game".getBytes(), 130, 10);//分数从大到小 执行后的结果看下图 2 Iterator<byte[]> iter = set.iterator(); int i = 1; //存放排名数据 List<User> list = new ArrayList<User>(); while(iter.hasNext()) { User user = (User) SerializeUtil.deserialize(iter.next()); user.setRank(i++);//排名 list.add(user); } for(User user : list) { System.out.println(user); } }

 

图一                                                                                                  图二

 


最新回复(0)