NBA籃球圖文直播室之數據排行榜
作者:張子良
1.1 業務規則
球員數據排行榜,實時顯示兩隊各項技術參數最高的球員信息,技術參數包括得分、籃板、助攻、搶斷、蓋帽、出場時間、失誤和規次數。如下圖所示:
圖1:數據排行榜
1.2 技術選型
Redis提供當前版本提供四種數據類型string、list、set、zset、hash,其中string爲基礎類型,其它四種爲擴展類型。每種數據類型都有其適用的特定場景,在這裏我們選擇zset作爲數據排行榜數據信息存儲的載體,主要是考慮到它所提供的自動排序功能。zset提供的主要的操作命令如下表所示:
表1:zset命令清單
序號 | 命令 | 功能 |
1 | zadd(key, score, member) | 向名稱爲key的zset中添加元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序。 |
2 | zrem(key, member) | 刪除名稱爲key的zset中的元素member |
3 | zincrby(key, increment, member) | 如果在名稱爲key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中添加該元素,其score的值爲increment |
4 | zrank(key, member) | 返回名稱爲key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),若沒有member元素,返回“nil” |
5 | zrevrank(key, member) | 返回名稱爲key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),若沒有member元素,返回“nil” |
6 | zrange(key, start, end) | 返回名稱爲key的zset(元素已按score從小到大排序)中的index從start到end的所有元素 |
7 | zrevrange(key, start, end) | 返回名稱爲key的zset(元素已按score從大到小排序)中的index從start到end的所有元素 |
8 | zrangebyscore(key, min, max) | 返回名稱爲key的zset中score >= min且score <= max的所有元素 |
9 | zcard(key) | 返回名稱爲key的zset的基數 |
10 | zscore(key, element) | 返回名稱爲key的zset中元素element的score |
11 | zremrangebyrank(key, min, max) | 刪除名稱爲key的zset中rank >= min且rank <= max的所有元素 |
12 | zremrangebyscore(key, min, max) | 刪除名稱爲key的zset中score >= min且score <= max的所有元素 |
13 | zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX) | 對N個zset求並集和交集,並將最後的集合保存在dstkeyN中。對於集合中每一個元素的score,在進行AGGREGATE運算前,都要乘以對於的WEIGHT參數。如果沒有提供WEIGHT,默認爲1。默認的AGGREGATE是SUM,即結果集合中元素的score是所有集合對應元素進行 SUM運算的值,而MIN和MAX是指,結果集合中元素的score是所有集合對應元素中最小值和最大值。 |
1.3 存儲設計
以每一項技術參數作爲一個關鍵字,以每一個隊員球衣號碼爲一個Member,以技術參數值爲SCORE。需要統計的技術參數包括得分、籃板、助攻、搶斷、蓋帽、出場時間、失誤和犯規次數。按照NBA籃球比賽規則,單場比賽最多允許15名隊員出場(常規賽區別於季後賽),每個關鍵字,最多包含15個Member。關鍵字清單列表如下所示:
表2:關鍵字清單
序號 | KEY | 備註 |
1 | NBA.YYMMDD.XX.HOST. MAX .SCORE | 主隊最高得分 |
2 | NBA.YYMMDD.XX.HOST. MAX.BORAD | 主隊最高籃板球 |
3 | NBA.YYMMDD.XX.HOST. MAX. ASSIST | 主隊最多助攻 |
4 | NBA.YYMMDD.XX.HOST. MAX. STEAL | 搶斷 |
5 | NBA.YYMMDD.XX.HOST. MAX. BSHOT | 蓋帽 |
6 | NBA.YYMMDD.XX.HOST. MAX.TIME | 出場時間 |
7 | NBA.YYMMDD.XX.HOST. MAX. FAILD | 失誤 |
8 | NBA.YYMMDD.XX.HOST. MAX. FOUL | 犯規次數 |
備註:此處只列出主隊關鍵字,客隊關鍵字只有直接使用GUEST替換HOST即可。