Redis 排行榜

使用Redis 有序集合zset

zset 是set 类型的一个扩展,比原有的类型多了一个顺序属性.此属性在每次插入数据时会自动调整顺序值,保证value值按照一定顺序连续排列。

实现

1 当新的玩家加入排行榜时候,在redis zset中新增一条记录
   zadd   overall_ability 62 Tony
   zadd:新增的指令
   overall_ability:key,即这个排行榜的名称/标识
   62:分数
   Tony:玩家名称

2 当玩家实力有变化的时候,更新玩家实力
   zadd   overall_ability 61 Tony
   跟新增是一样的

3 获取前100排名
   zrevrange overall_ability 0 99

4 查看玩家排名
   zrevrank overall_ability Tony

5 查看玩家实时分数
   zscore overall_ability Tony

代码

'''
/**

* 添加一个元素, zset与set最大的区别就是每个元素都有一个score,因此有个排序的辅助功能;  zadd

*

* @param key

* @param value

* @param score

*/

public void zSetAdd(String key, String value,double score) {

redisTemplate.opsForZSet().add(key, value, score);

}

/**

* 删除元素 zrem

*

* @param key

* @param value

*/

public void zSetRemove(String key, String value) {

redisTemplate.opsForZSet().remove(key, value);

}

/**

* score的增加or减少 zincrby

*

* @param key

* @param value

* @param score

*/

public Double zSetIncrScore(String key, String value,double score) {

return redisTemplate.opsForZSet().incrementScore(key, value, score);

}

/**

* 查询value对应的score  zscore

*

* @param key

* @param value

* @return

*/

public Double zSetScore(String key, String value) {

return redisTemplate.opsForZSet().score(key, value);

}

/**

* 判断value在zset中的排名  zrank

*

* 积分小的在前面

*

* @param key

* @param value

* @return

*/

public Long zSetRank(String key, String value) {

return redisTemplate.opsForZSet().rank(key, value);

}

/**

* 判断value在zset中的排名  zrank

*

* 积分小的在前面

*

* @param key

* @param value

* @return

*/

public Long zSetRevRank(String key, String value) {

return redisTemplate.opsForZSet().reverseRank(key, value);

}

/**

* 查询集合中指定顺序的值, 0 -1 表示获取全部的集合内容  zrange

*

* 返回有序的集合,score小的在前面

*

* @param key

* @param start

* @param end

* @return

*/

public Set zSetRange(String key,long start,long end) {

return redisTemplate.opsForZSet().range(key, start, end);

}

/**

* 查询集合中指定顺序的值和score,0, -1 表示获取全部的集合内容

*

* @param key

* @param start

* @param end

* @return

*/

public Set> zSetRangeWithScore(String key,long start,long end) {

return redisTemplate.opsForZSet().rangeWithScores(key, start, end);

}

/**

* 查询集合中指定顺序的值  zrevrange

*

* 返回有序的集合中,score大的在前面

*

* @param key

* @param start

* @param end

* @return

*/

public Set zSetRevRange(String key,long start,long end) {

return redisTemplate.opsForZSet().reverseRange(key, start, end);

}

/**

* 根据score的值,来获取满足条件的集合  zrangebyscore

*

* @param key

* @param min

* @param max

* @return

*/

public Set zSetSortRange(String key,long min,long max) {

return redisTemplate.opsForZSet().rangeByScore(key, min, max);

}

/**

* 返回集合的长度

*

* @param key

* @return

*/

public Long zSetSize(String key) {

return redisTemplate.opsForZSet().zCard(key);

}

'''

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容