在Redis来实现用户的单点的使用教程

排名函数是一种常见的需求。这是一个很好的和快速的选择使用特征的有序集合在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(美元美元美元的关键,启动,停止,真的);