最近需要用到redis 的排序方法,在网上看到的基本上都是redis 客户端的命令,没有对应成相应的java api,今天写了两个单元测试,关于redis的list结合hash的排序和set结合String的排序,希望家多多提意见,有其他更好的redis 排序 请指导。谢谢。
A:set结合String的排序
代码:
1:
jedis.sadd("tom:friend:list", "123"); //tom的好友列表
jedis.sadd("tom:friend:list", "456");
jedis.sadd("tom:friend:list", "789");
jedis.sadd("tom:friend:list", "101");
jedis.set("uid:sort:123", "1000"); //好友对应的成绩
jedis.set("uid:sort:456", "6000");
jedis.set("uid:sort:789", "100");
jedis.set("uid:sort:101", "5999");
jedis.set("uid:123", "{'uid':123,'name':'lucy'}"); //好友的详细信息
jedis.set("uid:456", "{'uid':456,'name':'jack'}");
jedis.set("uid:789", "{'uid':789,'name':'marry'}");
jedis.set("uid:101", "{'uid':101,'name':'icej'}");
SortingParams sortingParameters = new SortingParams();
// sortingParameters.desc();
// sortingParameters.limit(0, 2);
sortingParameters.get("uid:*");
// sortingParameters.get("uid:sort:*");
sortingParameters.by("uid:sort:*");
//对应的redis 命令是./redis-cli sort tom:friend:list by uid:sort:* get uid:*
List<String> result=jedis.sort("tom:friend:list", sortingParameters);
for(String item:result){
System.out.println("item..."+item);
}
打印输出为:
item...{'uid':789,'name':'marry'}
item...{'uid':123,'name':'lucy'}
item...{'uid':101,'name':'icej'}
item...{'uid':456,'name':'jack'}
2:
jedis.sadd("tom:friend:list", "123"); //tom的好友列表
jedis.sadd("tom:friend:list", "456");
jedis.sadd("tom:friend:list", "789");
jedis.sadd("tom:friend:list", "101");
jedis.set("uid:sort:123", "1000"); //好友对应的成绩
jedis.set("uid:sort:456", "6000");
jedis.set("uid:sort:789", "100");
jedis.set("uid:sort:101", "5999");
jedis.set("uid:123", "{'uid':123,'name':'lucy'}"); //好友的详细信息
jedis.set("uid:456", "{'uid':456,'name':'jack'}");
jedis.set("uid:789", "{'uid':789,'name':'marry'}");
jedis.set("uid:101", "{'uid':101,'name':'icej'}");
SortingParams sortingParameters = new SortingParams();
// sortingParameters.desc();
// sortingParameters.limit(0, 2);
sortingParameters.get("uid:*");
sortingParameters.get("uid:sort:*");
sortingParameters.by("uid:sort:*");
//对应的redis 命令是./redis-cli sort tom:friend:list by uid:sort:* get uid:* get uid:sort:*
List<String> result=jedis.sort("tom:friend:list", sortingParameters);
for(String item:result){
System.out.println("item..."+item);
}
打印输出为:
item...{'uid':789,'name':'marry'}
item...100
item...{'uid':123,'name':'lucy'}
item...1000
item...{'uid':101,'name':'icej'}
item...5999
item...{'uid':456,'name':'jack'}
item...6000
B:list结合hash的排序
jedis.hset("userrr1", "name", "hanjie");
jedis.hset("userrr11", "name", "hanjie");
jedis.hset("userrr12", "name", "86");
jedis.hset("userrr13", "name", "x86");
jedis.lpush("ml", "12");
jedis.lpush("ml", "11");
jedis.lpush("ml", "23");
jedis.lpush("ml", "13");
SortingParams sortingParameters = new SortingParams();
sortingParameters.get("userrr*->name");
List<String> result=jedis.sort("ml", sortingParameters);
for(String item:result){
System.out.println("item...."+item);
}
对应的redis客户端命令是:sort ml get user*->name
具体的讲解我也不多说了,大家可以自己对比,找下规律。
返回:
item....hanjie
item....86
item....x86
item....null //userrr23在hash中不存在,所以此处为null