摘要: 本文主要介紹視頻直播間系統,以及如何使用阿里雲Redis混合存儲實例方便快捷的構建大數據量,低延遲的視頻直播間服務。redis
本文主要介紹視頻直播間系統,以及如何使用阿里雲Redis混合存儲實例方便快捷的構建大數據量,低延遲的視頻直播間服務。緩存
視頻直播間做爲直播系統對外的表現形式,在整個系統中處於核心地位。一般除了視頻直播窗口外,直播間還包含在線用戶,禮物,評論,點贊,排行榜等信息。直播間消息,時效性高,互動性強,對系統時延有着很是高的要求,很是適合使用Redis等緩存服務來處理。安全
實時排行信息包含直播間在線用戶列表,各類禮物排行榜,彈幕消息(能夠理解爲按消息維度的消息排行榜)等信息,適合使用Redis中的SortedSet結構進行存儲。架構
例如,以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) "follow" 2) "6"
時間線信息是以時間爲維度的信息列表,典型的好比主播動態,新帖。這類信息排序方式是固定的時間順序,能夠考慮使用List或者SortedSet來存儲。大數據
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}"
阿里雲Redis混合存儲產品徹底兼容Redis協議,用戶無需修改任何代碼,以低成本的NVMe盤存儲不常訪問的直播間數據,能夠突破內存容量限制,單實例最高可支持TB級別的數據容量。
優化