91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Redis實現排行榜

發布時間:2021-11-23 23:03:18 來源:億速云 閱讀:307 作者:柒染 欄目:云計算

今天就跟大家聊聊有關如何使用Redis實現排行榜,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1、前言

實現一個排版榜,我們通常想到的就是mysql的order by 簡單粗暴就擼出來了。但是這樣真的優雅嗎?

數據庫是系統的瓶頸,這是眾所周知的。如果給你一張百萬的表,讓你排序做排行榜,花費的時間是十分可怕的。

不如緩存吧,order by的時候強制使用索引。但是這樣真的優雅嗎?

如何使用Redis實現排行榜

我們分析一下排行榜,一個用戶一個排名,意味著要去重,這時我們會想到Java的一種數據結構Set。不過Set又是無序的。有沒有一種結構是可以保住元素唯一以及有序的呢。

幸運的是,還真的有。Redis的ZSet的就是這樣的一種數據結構。Zset里面的元素是唯一的,有序的,按分數從小到大排序。作為一名優秀的crud程序員,我們從這幾個方方面入手了解zset結構。

 

2.1、ZADD 增加與修改

其時間復雜度為 O(M*log(N)), N 是有序集的基數, M 為成功添加的新成員的數量。如果key不存在就插入,存在就更新。

使用如下:

如何使用Redis實現排行榜

說明:

page_rankde 是key,10是分數,google.com是value。

 

2.2、ZRANK 查詢

時間復雜度: O(log(N))

使用如下:

如何使用Redis實現排行榜

說明:

salary的key,tom是value,只要輸入特定的key與value就能查詢到對應的排名。

 

del 刪除


直接使用redis的del命令

回到排行榜的實現,要利用zset結構來實現的話,重要的是如何設計分數。分析一下排行榜單的設計。如果排行榜的設計按一個維度比如金幣數量,那只需把其數量取反作為分數score即可。取反是因為zset默認從小到大排序。

實現如下:

如何使用Redis實現排行榜

如果排行榜的設計按兩個維度比如金幣數量和用時。由于score是一個可以double類型的參數,設計的時候可以把用時作為小數,用一天的總毫秒數減去花費毫秒數作為小數部分,然后當做字符串拼接起來,然后取反作為score。

實現如下:

如何使用Redis實現排行榜

代碼實現

如何使用Redis實現排行榜

看完上述內容,你們對如何使用Redis實現排行榜有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

信宜市| 醴陵市| 区。| 龙山县| 泸定县| 稻城县| 赤水市| 邛崃市| 济源市| 云龙县| 东阳市| 星座| 牟定县| 客服| 嘉祥县| 兰西县| 清水县| 敦化市| 华亭县| 七台河市| 将乐县| 三亚市| 克山县| 四会市| 佛坪县| 新营市| 甘孜| 碌曲县| 华宁县| 吐鲁番市| 天峻县| 南郑县| 丰城市| 西乌珠穆沁旗| 闸北区| 桐乡市| 昔阳县| 喀喇| 通榆县| 库尔勒市| 炎陵县|