redis中sort妙用,实现动态生成排行榜

        在游戏中,有很多维度的排行榜,服务器在实现过程中,一般都要预先维护对应因子的zset,比如根据玩家等级来排序,那就需要对应有一个level作为score的zset,如果是以战斗力排序,那就用战力作为score维护一个zset。如果现在临时有一个新需求,需要对一个之前没有维护zset的因子来生成一个排行榜,如何处理?

        redis中的sort命令,灵活变通一下,就可以实现上面的需求。先看一下sort命令的说明:

SORT | RedisSorts the elements in a list, a set, or a sorted set, optionally storing the result.https://redis.io/commands/sort/

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern
  ...]] [ASC | DESC] [ALPHA] [STORE destination]

游戏中对应的玩家数据结构

user_id_list:set,所有玩家编号的汇总

redis中sort妙用,实现动态生成排行榜_第1张图片

user_info_*:hash,单个玩家的数据信息,

 那么根据玩家level生成一个排行榜:

redis中sort妙用,实现动态生成排行榜_第2张图片

这样可以得到{uid,level,name}这样一个队列,以level排序,类似实现了联表查询,同时这个临时排行榜还可以保存为一个key

redis中sort妙用,实现动态生成排行榜_第3张图片

这个命令中还有limit,可以限制排行榜的人数,同时临时保存的结果集还可以设置过期时间,作为一个cache存在

sort命令可以实现多个hash,多个string的联合查询

redis中sort妙用,实现动态生成排行榜_第4张图片

备注:这里我觉得最值得一提的是,sort可以实现多表的联表查询,一个命令搞定,不需要lua脚本就可以实现一次原子操作。 

你可能感兴趣的:(redis,redis,数学建模,数据库)