全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):搭建ApsaraVideo for Live間資訊系統

更新時間:Oct 25, 2024

您可以使用Tair(Redis OSS-compatible)方便快捷地構建大流量、低延遲的ApsaraVideo for Live間Message Service。

背景資訊

ApsaraVideo for Live間作為直播系統對外的表現形式,是整個系統的核心之一。除了ApsaraVideo for Live視窗外,直播間的線上使用者、禮物、評論、點贊、熱門排行榜等資料資訊時效性高,互動性強,對系統時延有著非常高的要求,非常適合使用Redis快取服務來處理。

本篇最佳實務將向您展示使用Tair(Redis OSS-compatible)搭建ApsaraVideo for Live間資訊系統的樣本。您將瞭解三類資訊的構建方法:

  • 即時排行類資訊

  • 計數類資訊

  • 時間軸資訊

即時排行類資訊

即時排行類資訊包含直播間線上使用者列表、各種禮物的熱門排行榜、彈幕訊息(類似於按訊息維度排序的訊息熱門排行榜)等,適合使用Redis中的有序集合(sorted set)結構進行儲存。

Redis集合使用空值散列表(hash table)實現,因此對集合的增刪改查操作的時間複雜度都是O(1)。有序集合中的每個成員都關聯一個分數(score),可以方便地實現排序等操作。下面以增加和返回彈幕訊息為例對有序集合在直播間資訊系統中的實際運用進行說明。

  • 以unix timestamp+毫秒數為分值,記錄user55的直播間增加的5條彈幕:

    redis> ZADD user55:_danmu 1523959031601166 message111111111111
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959031601266 message222222222222
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959088894232 message33333
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959090390160 message444444
    (integer) 1
    11.160.24.14:3003> ZADD user55:_danmu 1523959092951218 message5555
    (integer) 1
  • 返回最新的3條彈幕資訊:

    redis> ZREVRANGEBYSCORE user55:_danmu +inf -inf LIMIT 0 3
    1) "message5555"
    2) "message444444"
    3) "message33333"
  • 返回指定時間段內的3條彈幕資訊:

    redis> ZREVRANGEBYSCORE user55:_danmu 1523959088894232 -inf LIMIT 0 3
    1) "message33333"
    2) "message222222222222"
    3) "message111111111111"

計數類資訊

計數類資訊以使用者相關資料為例,有未讀訊息數、關注數、粉絲數、經驗值等等。這類訊息適合以Redis中的散列(hash)結構進行儲存。比如關注數可以用如下的方法處理:

redis> HSET user:55 follower 5
(integer) 1
redis> HINCRBY user:55 follower 1 //關注數+1
(integer) 6 
redis> HGETALL user:55
1) "follower"
2) "6"

時間軸資訊

時間軸資訊是以時間為維度資訊列表,典型有主播動態、新帖等。這類資訊是按照固定的時間順序排列,可以使用列表(list)或者有序列表來儲存,樣本如下:

redis> LPUSH user:55_recent_activitiy  '{datetime:201804112010,type:publish,title:開播啦,content:加油}'
(integer) 1
redis> LPUSH user:55_recent_activitiy '{datetime:201804131910,type:publish,title:請假,content:抱歉,今天有事鴿一天}'
(integer) 2
redis> LRANGE user:55_recent_activitiy 0 10
1) "{datetime:201804131910,type:publish,title:\xe8\xaf\xb7\xe5\x81\x87\",content:\xe6\x8a\xb1\xe6\xad\x89\xef\xbc\x8c\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x9c\x89\xe4\xba\x8b\xe9\xb8\xbd\xe4\xb8\x80\xe5\xa4\xa9}"
2) "{datetime:201804112010,type:publish,title:\xe5\xbc\x80\xe6\x92\xad\xe5\x95\xa6,content:\xe5\x8a\xa0\xe6\xb2\xb9}"

相關資源