如何实现一个简单的Redis排行榜

2020年12月29日17:23:21 发表评论 77 次浏览

介绍

了解如何在Redis中创建简单的页首横幅。 Redis是一种流行的键值存储, 它针对速度和灵活性进行了优化。 Redis的排序集非常适合实施排行榜, 这使Redis成为许多游戏应用程序和网站的流行选择。

要求

  • 运行Linux(CentOS 7或Ubuntu 14.04)的云服务器。
  • Redis已安装并正在运行。如果需要, 请参阅我们的有关在notlogy Linux云服务器上安装Redis的文章。

排序集

对于此项目, 我们将使用排序集来维护高分列表。排序集是字符串的集合, 这些字符串按你设置的排序分数排序。尽管乐谱可以重复, 但字符串不能重复。

这意味着更新用户分数所需要做的只是将用户再次添加到已排序的集合中, 这一次是使用新分数。这将具有使用新乐谱更新现有字符串的效果。

我们将使用扎德更新分数的命令, ZRANK获得球员的排名, 以及ZRANGE列出前5名玩家。

将数据添加到排行榜

让我们从向排行榜中添加一些测试数据开始。在命令行中, 使用以下命令登录到Redis:

sudo redis-cli

ZADD添加数据

接下来, 使用zadd命令添加玩家及其分数。的语法zadd是:

zadd [set name] [score] [string]

在这个例子中, 我们将命名我们的集合排行榜, 得分将是玩家在游戏中的当前分数, 字符串是玩家的名字。

使用以下三个命令添加三个播放器:

zadd leaderboard 1 "Alice"
zadd leaderboard 30 "Bob"
zadd leaderboard 5300 "Carol"

ZREVRANGE列出数据

你可以使用zrevrange命令。此命令有两个参数:

zrevrange [set name] [first position] [second position]

它返回这两个位置之间的所有结果, 并按得分相反的顺序排序, 最高得分在前。 (与之相反zrevrangeisZrange, 它首先返回得分最低的结果。)

请注意, Redis使用标准的Unix表示法, 这意味着列表中的第一项是数字0, 第二项是数字1, 依此类推。要获得前三名得分, 我们将使用以下命令:

zrevrange leaderboard 0 2

要获得前100个得分, 命令将是:

zrevrange leaderboard 0 99

依此类推。

让我们列出前三个得分:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Bob"
3) "Alice"

如你所见, Carol位居第一, Bob位居第二, Alice位居第三。

我们也可以添加得分到命令, 以便它也返回其分数:

127.0.0.1:6379> zrevrange leaderboard 0 2 withscores
1) "Carol"
2) "5300"
3) "Bob"
4) "30"
5) "Alice"
6) "1"

接下来, 让我们添加第四个人:

zadd leaderboard 25 "Don"

不过, 我们仍然只想显示前三名球员:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Bob"
3) "Don"

ZADD更新数据

在周末, 爱丽丝努力工作, 并设法获得了很多积分。我们可以通过再次添加Alice来更新其分数, 这次使用新分数:

zadd leaderboard 31 "Alice"

如果我们再次列出前三名的玩家, 我们可以看到爱丽丝现在排在第二位, 唐也不再列在排行榜上:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Carol"
2) "Alice"
3) "Bob"

ZREM删除数据

几个球员一直抱怨卡罗尔的分数可疑高。当你查看游戏日志时, 会发现证据表明她一直在作弊。禁止Carol进入游戏后, 你需要使用以下命令将其从排行榜中删除兹雷姆命令。

的语法兹雷姆是:

zrem [set name] [string]

让我们使用以下命令从排行榜中删除Carol:

zrem leaderboard "Carol"

当我们刷新排名时, 爱丽丝现在位居榜首:

127.0.0.1:6379> zrevrange leaderboard 0 2
1) "Alice"
2) "Bob"
3) "Don"

选择一个Redis客户端

你将需要一个Redis客户端作为Redis与你选择的编程语言之间的接口。对于这个项目, 我们将使用PHP, 但是有Redis客户端可以使用多种语言。Redis官方网站通过编程语言维护Redis客户的完整列表。推荐的客户标有金星。

推荐的PHP客户端是phpredis将其编译并安装为PHP模块, 以及Predis这是一个PHP库。我们将在本教程中使用Predis, 但是phpredis也是一个很好的客户端。

安装和测试Predis

安装Predis的最简单方法是从Pear官方频道下载它。在Ubuntu 14.04上, 你首先需要使用以下命令安装Pear:

sudo apt-get install php-pear

连接到官方Pear服务器并使用以下命令安装Predis:

sudo pear channel-discover pear.nrk.io
sudo pear install nrk/Predis

完成此操作后, 你可以使用简单的PHP脚本测试Predis安装。移至主Web目录并创建一个新文件, 名为predis-test.php使用命令:

sudo nano predis-test.php

将以下内容放入此文件:

<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();

$client = new Predis\Client();
$client->set('test', 'Hello world!');
$message = $client->get('test');

echo $message;

?>

保存并退出文件, 然后在浏览器中查看文件, 网址为http://example.com/predis-test.php。如果已安装Predis并连接到Redis, 则页面将显示" Hello world!"。

在网站上显示排行榜结果

最后, 让我们在表格中显示前三高分。为此, 我们将需要PHP将数组的内容放入HTML表中。

在你的Web目录中, 创建一个名为Leaderboard.php使用命令:

sudo nano leaderboard.php

将以下内容放入此文件:

<?php
require "Predis/Autoloader.php";
Predis\Autoloader::register();

$client = new Predis\Client();

$scores = $client->zRevRange('leaderboard', 0, 2, array('withscores' => true));

?>

<table cellpadding="0" cellspacing="5" >
  <tr>
    <td><b>Player</b></td>
    <td><b>Score</b></td>
  </tr>

<?php
  foreach($scores as $key => $index) {
    ?>
    <tr>
      <td><?php echo $key; ?></td>
      <td><?php echo $index; ?></td>
    </tr>
<?php
  }
?>

</table>

保存并退出文件, 然后在浏览器中查看文件, 网址为http://example.com/leaderboard.php。你将在当前的排行榜中看到前三名的得分。

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: