一、实现原理
我们分析一下排行榜,一个用户一个排名,意味着要去重,这时我们会想到Java的一种数据结构Set。不过Set又是无序的。有没有一种结构是可以保住元素唯一以及有序的呢。
幸运的是,还真的有。Redis的ZSet的就是这样的一种数据结构。Zset里面的元素是唯一的,有序的,按分数从小到大排序。作为一名优秀的crud程序员,我们从这几个方方面入手了解zset结构。
二、代码实践
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(2);//选择数据库1
$key = "hot";
//insert($redis, $key);
//get_rank_list($redis, $key);
get_rank($redis, $key, 'key29');
/**
* 插入数据
* @param $redis
* @param $key
*/
function insert($redis, $key)
{
$id = rand(1, 20);
$redis->zIncrBy($key, 1, 'key' . $id);
echo 'done';
}
/**
* 获取 top N
* @param $redis
* @param $key
*/
function get_rank_list($redis, $key)
{
$top = 10; //获取前10个
$list = $redis->zRevRange($key, 0, $top - 1, true);
print_r($list);
}
/**
* 获取某个key的排名
* @param $redis
* @param $key
* @param $id
*/
function get_rank($redis, $key, $id)
{
echo $redis->zRank($key, $id);
}