一、實現原理
我們分析一下排行榜,一個用戶一個排名,意味着要去重,這時我們會想到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);
}