Redis实战之Sort Set

前端之家收集整理的这篇文章主要介绍了Redis实战之Sort Set前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

《Redis实战之Sort Set》要点:
本文介绍了Redis实战之Sort Set,希望对您有用。如果有疑问,可以联系我们。

前言

游戏服务器需要做一个排行榜实时更新,如果沿用传统的方法,一般是通过后端的定时任务去跑数据来生成排行榜数据,这种方法一方面无法满足产品对功能实时性的要求,另一方面也一定程度上消耗服务器端有限的资源.如果从每次数据库读取数据并进行排名(使用MysqL的sort关键字进行排序),在关卡数据量的级数大时是一种效率低的方法.在查阅大量资料后,发现了Redis中的有序集合(Sort Set).

Redis有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员.不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序.有序集合的成员是唯一的,但分数(score)却可以重复.集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1). 集合中最大的成员数为 2^32 - 1.

应用场景

Redis有序集合非常适用于有序不重复数据的存储,例如游戏开发中无处不在的排行榜,如等级排行榜,经验排行榜,积分排行榜,历史筹码排行榜等.

相关命令

本文只给出部分常用的命令,所有的命令可参考http://www.runoob.com/redis/redis-sorted-sets.html.

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数

  • ZCARD key 获取有序集合的成员数

  • ZRANGE key start stop [WITHscoreS] 通过索引区间返回有序集合成指定区间内的成员

  • ZRANK key member 返回有序集合中指定成员的索引

  • ZREM key member [member ...] 移除有序集合中的一个或多个成员

  • ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

使用场景

输入5个用户的积分(uid,score),实现top-3的查询,某个用户更新积分,再次查询top-3.

  1. 添加积分:添加 (player0001,1800),(player0002,1987),(player0003,965),(player0004,4382),(player0005,0),并假定rank 为sorted set的name.

  2. 查询5人的积分排行榜

  3. 更新player005的积分;

  4. 重新查询5人的积分排行榜

Redis实战之Sort Set

PHP实现

排行榜思想:玩家每次积分发生变动时,更改Redis中相应玩家的积分.当客户端向服务器哀求调用GetRank时,PHP服务器调用zrangeRank函数,返回相应的数据.

Redis实战之Sort Set

《Redis实战之Sort Set》是否对您有启发,欢迎查看更多与《Redis实战之Sort Set》相关教程,学精学透。编程之家 jb51.cc为您提供精彩教程。

猜你在找的Redis相关文章