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);
}
}
图一 图二