Redis:Redis实现排行榜功能

一、实现原理
我们分析一下排行榜,一个用户一个排名,意味着要去重,这时我们会想到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);
}
 

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/12356920.html

转载请注明出处!谢谢~~

posted @ 2020-02-24 14:44  wukong1688  阅读(1326)  评论(0编辑  收藏  举报