久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何使用Redis實現(xiàn)排行榜

177次閱讀
沒有評論

共計 920 個字符,預計需要花費 3 分鐘才能閱讀完成。

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

1、前言

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

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

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

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

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

 2.1、ZADD 增加與修改

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

使用如下:

說明:

page_rankde 是 key,10 是分數(shù),google.com 是 value。

 2.2、ZRANK 查詢

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

使用如下:

說明:

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

 del 刪除

直接使用 redis 的 del 命令

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

實現(xiàn)如下:

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

實現(xiàn)如下:

代碼實現(xiàn)

看完上述內(nèi)容,你們對如何使用 Redis 實現(xiàn)排行榜有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計920字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 白山市| 桐乡市| 华阴市| 遵化市| 德庆县| 怀来县| 衡阳县| 平阳县| 乡城县| 永宁县| 冀州市| 白城市| 富阳市| 伊春市| 宁蒗| 疏勒县| 昌宁县| 陇南市| 托克托县| 昭通市| 敦化市| 通许县| 兖州市| 福鼎市| 蒲城县| 隆德县| 颍上县| 多伦县| 阳信县| 区。| 白城市| 福安市| 怀宁县| 内江市| 长岛县| 哈尔滨市| 友谊县| 漯河市| 呼玛县| 丰台区| 舟曲县|