首頁 >資料庫 >Redis >分享redis多維度排行思路

分享redis多維度排行思路

藏色散人
藏色散人轉載
2023-04-21 16:01:381306瀏覽

這篇文章為大家帶來了關於redis的相關知識,其中主要跟大家分享redis 多維度排行思路,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

分享redis多維度排行思路

問題描述

  1. #眾所周知redis zset 經常用於排行榜,可以做到開箱即用,但是有一個缺點,就是只支援單維度的排行。

  2. 而實際專案中單一維度的排行確很不實用,一個簡單的範例,健步走排行,產品的需求是根據步數、完成時間、人名做排行,排序優先權是從左到右。

  3. 我的解決想法是把所有維度轉換成數字,然後這些維度的數字相加,這樣就可以解決多維度的排行。

具體解決想法

  1. ##完成時間:完成時間一般儲存的是時間戳,而時間戳是越晚完成值就越大,要做到完成時間越早排名越前就需要,越早完成的值就越大。我們可以用一個較大的時間戳記減去用戶完成時間的時間戳,這樣就能做到越早完成值越大。
  2. 人名:人名一般由漢字或字母組成,漢字和字母都是字串,我們要做排序,第一步就是要把字串轉換成數字,這個過程推薦用php的原生函數

    mb_ord

    例如一個使用者的步數是10000步,完成時間(計算後的)是100000(隨意寫的一個時間戳),人名是500(計算後)是張三(隨意寫的),我們就能得到一個值10000.100500(步數.完成時間和人名相加)。

  3. 在實際取值的過程中我們可以把小數點後面的去掉,小數點後面的數只用來做排行。
###推薦學習:《###Redis影片教學###》#############

以上是分享redis多維度排行思路的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除