redis実装検索ランキング後記
1123 ワード
以前redis実装検索ランキングを書いた記事を覚えていますが、今日redisをテストしたとき、その中のバグを見つけました.
検索ランキングを集計するときはjedisを使います.zrevrange()メソッドではscore降順に並べて結果を得ることはできません
zrevrangeWithScores(String key,long start,long end)で取得するべきです
簡単な例は次のとおりです.
//備考:結果はLinkedHashMapが格納する必要があります.これにより、ランキングの1位が1位に格納されることが保証されます.このように推す.
検索ランキングを集計するときはjedisを使います.zrevrange()メソッドではscore降順に並べて結果を得ることはできません
Set set=jedis.zrevrange("sort", 0, 6);
zrevrangeWithScores(String key,long start,long end)で取得するべきです
簡単な例は次のとおりです.
public Map zrevrangeWithScores(String key,long start,long end){
Jedis jedis = getJedisPool().getResource();
Map map=new LinkedHashMap();
try {
Set tuples= jedis.zrevrangeWithScores(key, start, end);
if(tuples==null ){
return map;
}
for(Tuple tuple : tuples){
double score=tuple.getScore();
String member=tuple.getElement();
map.put(member, score);
}
} finally {
/// ... it's important to return the Jedis instance to the pool once you've finished using it
getJedisPool().returnResource(jedis);
}
/// ... when closing your application:
//getJedisPool().destroy();
return map;
}
//備考:結果はLinkedHashMapが格納する必要があります.これにより、ランキングの1位が1位に格納されることが保証されます.このように推す.