Redis sorted set:有序集合做游戏排名

这几天项目要用到Redis做游戏排名,做之前先写一个测试,废话不多说,直接上代码:

1.先准备好我们的工具类,序列化工具查找网上Protostuff序列化工具类

https://blog.csdn.net/z69183787/article/details/52672246

测试类

public class UserTest implements Serializable {


private static final long serialVersionUID = 3610058000773104023L;

private String id;

    private String name;
    
    private double score;
    
    private int rank;//排名               
    
    public UserTest() {
  
super();  
// TODO Auto-generated constructor stub  

}


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;
}


public UserTest(String id, String name, double score, int rank) {
super();
this.id = id;
this.name = name;
this.score = score;
this.rank = rank;
}


@Override
public String toString() {
return "UserTest [id=" + id + ", name=" + name + ", score=" + score + ", rank=" + rank + "]";
}


public UserTest(String id, String name, double score) {
super();
this.id = id;
this.name = name;
this.score = score;
}
   


}

2.这是我们的测试类

public class GameRankTest {


private RedisClientTemplate jedis;
private ApplicationContext context;
public GameRankTest() {  
  
    }  

@Before
public void init() throws Exception{
context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
jedis = (RedisClientTemplate) context.getBean("jedis");
}

@Test 
    @Ignore
public void rankAdd() {
UserTest user1 = new UserTest("1001","张三",101.2);
UserTest user2 = new UserTest("1002","王子健",85.4);
UserTest user3 = new UserTest("1003","张三疯",120.6);
UserTest user4 = new UserTest("1004","王建国",100.4);
jedis.zadd("game".getBytes(), user1.getScore(), ProtoStuffSerializerUtil.serialize(user1));
jedis.zadd("game".getBytes(), user2.getScore(), ProtoStuffSerializerUtil.serialize(user2));
jedis.zadd("game".getBytes(), user3.getScore(), ProtoStuffSerializerUtil.serialize(user3));
jedis.zadd("game".getBytes(), user4.getScore(), ProtoStuffSerializerUtil.serialize(user4));
/*jedis.zadd("game".getBytes(), user1.getScore(), ObjectSer.ObjectToByte(user1));
jedis.zadd("game".getBytes(), user2.getScore(), ObjectSer.ObjectToByte(user2));
jedis.zadd("game".getBytes(), user3.getScore(), ObjectSer.ObjectToByte(user3));
jedis.zadd("game".getBytes(), user4.getScore(), ObjectSer.ObjectToByte(user4));*/
}

@Test 
//@Ignore
public void gameRankShow() { 
Set<byte[]> set = jedis.zrevrange("game".getBytes(), 0, -1);
Iterator<byte[]> iter = set.iterator();
int i = 1;  
     List<UserTest> list = new ArrayList<UserTest>(); 
     while(iter.hasNext()) {  
    //UserTest user = (UserTest) ObjectSer.ByteToObject(iter.next()); 
    UserTest user = ProtoStuffSerializerUtil.deserialize(iter.next(), UserTest.class);
            user.setRank(i++);  
            list.add(user);  
        } 
     for(UserTest user : list){
    System.out.println(user);  
     }
}
 
@Test 
@Ignore
public void gameDeleteData() {
Long a = jedis.zremrangeByRank("game".getBytes(), 0L, -1L);
System.out.println(a);
}
}

3.查看排名结果