排名
函数是一种常见的需求。这是一个很好的和快速的选择使用特征的有序集合在Redis实现排名。
一般的列表是有效的,比如
用户列表。如果没有按照总排名的有效性排名第一,可能总是一些老用户,对于新用户来说,太郁闷了。
首先,来到今天的积分列表,
排序规则是今天,从用户添加点的数量从更多到更少。
当用户增加积分时,它们都
操作一个日积分增加的有序集合。
假设今天是2015, 04 - 01,UID是1,加5点操作。
Redis
命令如下:
zincrby排名:20150401 51
假设还有几个其他用户也添加了点:
zincrby排名:20150401 12
zincrby排名:20150401 103
看看现在的有序集合排序的数据:20150401(积分
参数可以伴随着比分获得元素):
zrange排名:20150401 0-1积分
1)2
2)1
3)1
4)5
5)3
6)10 。
按分数从高到低,得到TOP10:
zrevrange排名:20150401 09积分
1)3
2)10 。
3)1
4)5
5)2
6)1
这些数据被
查询,因为只有三个元素。
如果你记录当天的分数表,其他数字的列表很简单。
例如,昨天的记分牌:
zrevrange排名:20150331 09积分
通过联盟的总成绩,上周实现了积分榜:
zunionstore等级:7等级:20150323 last_week等级:20150324等级:20150325等级:20150326等级:20150327等级:20150328等级:20150329重量1111111
就这样,7天的积分记录合并成有序集排名:last_week.if权重因素的权重是不给的,
默认是1。写出来不是为了隐藏细节。
所以关于TOP10在上周的列表:
zrevrange排名:last_week 09积分
每月的清单、季度清单、年度清单等
都是一样的。
一个简单的PHP版本实现如下。Redis的使用取决于PHP
扩展phpredis,和代码也依赖于
处理时间的碳库,代码很小,所以不评论。
< PHP
命名
空间的博客 redis;
Redis使用;
使用碳碳;
阶级队伍{
const前缀= 'rank:';
保护$ redis = null;
公共
功能__construct(Redis Redis美元){
美元-> redis = $ redis;
}
公共功能addscores($员,几十美元){
$ =自我:前缀。
日期('ymd);
返回这个->使用-> zincrby(美元美元美元的关键,分数,成员);
}
保护功能getonedayrankings(美元美元美元的日期,开始,停止){
$ =自我:前缀。$日期;
返回这个->使用-> zrevrange(美元美元美元的关键,
启动,停止,真的);