欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Redis實(shí)現(xiàn)用戶(hù)積分排行榜的教程

 更新時(shí)間:2015年04月23日 12:00:24   作者:Mr_Jing  
這篇文章主要介紹了使用Redis實(shí)現(xiàn)用戶(hù)積分排行榜的教程,包括一個(gè)用PHP腳本進(jìn)行操作的例子,需要的朋友可以參考下

排行榜功能是一個(gè)很普遍的需求。使用 Redis 中有序集合的特性來(lái)實(shí)現(xiàn)排行榜是又好又快的選擇。

一般排行榜都是有實(shí)效性的,比如“用戶(hù)積分榜”。如果沒(méi)有實(shí)效性一直按照總榜來(lái)排,可能榜首總是幾個(gè)老用戶(hù),對(duì)于新用戶(hù)來(lái)說(shuō),那真是太令人沮喪了。

首先,來(lái)個(gè)“今日積分榜”吧,排序規(guī)則是今日用戶(hù)新增積分從多到少。

那么用戶(hù)增加積分時(shí),都操作一下記錄當(dāng)天積分增加的有序集合。
假設(shè)今天是 2015 年 04 月 01 日,UID 為 1 的用戶(hù)因?yàn)槟硞€(gè)操作,增加了 5 個(gè)積分。
Redis 命令如下:

ZINCRBY rank:20150401 5 1

假設(shè)還有其他幾個(gè)用戶(hù)也增加了積分:

ZINCRBY rank:20150401 1 2
ZINCRBY rank:20150401 10 3

看看現(xiàn)在有序集合 rank:20150401 中的數(shù)據(jù)(withscores 參數(shù)可以附帶獲取元素的 score):

ZRANGE rank:20150401 0 -1 withscores

1) "2"
2) "1"
3) "1"
4) "5"
5) "3"
6) "10"

按照分?jǐn)?shù)從高到低,獲取 top10:

ZREVRANGE rank:20150401 0 9 withscores

1) "3"
2) "10"
3) "1"
4) "5"
5) "2"
6) "1"

因?yàn)橹挥腥齻€(gè)元素,所以就查詢(xún)出了這些數(shù)據(jù)。

如果每天記錄當(dāng)天的積分排行榜,那么其他花樣百出的榜單也就簡(jiǎn)單了。
比如“昨日積分榜”:

ZREVRANGE rank:20150331 0 9 withscores

利用并集實(shí)現(xiàn)多天的積分總和,實(shí)現(xiàn)“上周積分榜”:

ZUNIONSTORE rank:last_week 7 rank:20150323 rank:20150324 rank:20150325 rank:20150326 rank:20150327 rank:20150328 rank:20150329 WEIGHTS 1 1 1 1 1 1 1

這樣就將 7 天的積分記錄合并到有序集合 rank:last_week 中了。權(quán)重因子 WEIGHTS 如果不給,默認(rèn)就是 1。為了不隱藏細(xì)節(jié),特意寫(xiě)出。
那么查詢(xún)上周積分榜 Top10 的信息就是:

ZREVRANGE rank:last_week 0 9 withscores

“月度榜”、“季度榜”、“年度榜”等等就以此類(lèi)推。

下面給出一個(gè) PHP 版的簡(jiǎn)單實(shí)現(xiàn)。使用 Redis 依賴(lài)于 PHP 擴(kuò)展 PhpRedis,代碼還依賴(lài)于 Carbon 庫(kù),用于處理時(shí)間。代碼量很少,所以就不敲注釋了。

<?php

namespace Blog\Redis;

use \Redis;
use Carbon\Carbon;


class Ranks {

  const PREFIX = 'rank:';

  protected $redis = null;


  public function __construct(Redis $redis) {
    $this->redis = $redis;
  }


  public function addScores($member, $scores) {
    $key = self::PREFIX . date('Ymd');
    return $this->redis->zIncrBy($key, $scores, $member);
  }


  protected function getOneDayRankings($date, $start, $stop) {
    $key = self::PREFIX . $date;
    return $this->redis->zRevRange($key, $start, $stop, true);

相關(guān)文章

  • 使用Redis實(shí)現(xiàn)用戶(hù)積分排行榜的教程

    使用Redis實(shí)現(xiàn)用戶(hù)積分排行榜的教程

    這篇文章主要介紹了使用Redis實(shí)現(xiàn)用戶(hù)積分排行榜的教程,包括一個(gè)用PHP腳本進(jìn)行操作的例子,需要的朋友可以參考下
    2015-04-04
  • redis內(nèi)存空間效率問(wèn)題的深入探究

    redis內(nèi)存空間效率問(wèn)題的深入探究

    redis緩存固然高效,可是它會(huì)占用我們系統(tǒng)中寶貴的內(nèi)存資源,那該如何解決呢?這篇文章主要給大家介紹了關(guān)于redis內(nèi)存空間效率問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵

    Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵

    本文主要介紹了Redis哨兵模式實(shí)現(xiàn)一主二從三哨兵,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟

    Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟

    這篇文章主要介紹了Redis Sentinel實(shí)現(xiàn)高可用配置的詳細(xì)步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程

    在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程

    這篇文章主要介紹了在CenOS系統(tǒng)下安裝和配置Redis數(shù)據(jù)庫(kù)的教程,Redis是一個(gè)可基于內(nèi)存的高性能NoSQL數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2015-11-11
  • Redis分布式緩存的安裝

    Redis分布式緩存的安裝

    這篇文章主要介紹了Redis分布式緩存的安裝,Redis?是一個(gè)開(kāi)源(BSD許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件,需要的朋友可以參考下
    2023-05-05
  • redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流的代碼

    redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流的代碼

    這篇文章主要介紹了redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流,滑動(dòng)窗口算法思想就是記錄一個(gè)滑動(dòng)的時(shí)間窗口內(nèi)的操作次數(shù),操作次數(shù)超過(guò)閾值則進(jìn)行限流,本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹,需要的朋友參考下吧
    2022-03-03
  • 基于redis實(shí)現(xiàn)分布式鎖的原理與方法

    基于redis實(shí)現(xiàn)分布式鎖的原理與方法

    這篇文章主要給大家介紹了基于redis實(shí)現(xiàn)分布式鎖的原理與方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Redis中Redisson紅鎖(Redlock)使用原理

    Redis中Redisson紅鎖(Redlock)使用原理

    本文主要介紹了Redis中Redisson紅鎖(Redlock)使用原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis實(shí)戰(zhàn)之商城購(gòu)物車(chē)功能的實(shí)現(xiàn)代碼

    Redis實(shí)戰(zhàn)之商城購(gòu)物車(chē)功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Redis實(shí)戰(zhàn)之商城購(gòu)物車(chē)功能的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論