1. 程式人生 > 其它 >EasyRTC通過Golang快取庫fastcache實現線上使用者儲存在記憶體中加快速度

EasyRTC通過Golang快取庫fastcache實現線上使用者儲存在記憶體中加快速度

EasyRTC是TSINGSEE青犀視訊團隊在音視訊領域多年的技術積累而研發的一款產品。它是覆蓋全球的實時音訊開發平臺,支援一對一、一對多等視訊通話。

EasyRTC擁有MCU和SFU兩種架構,無需安裝客戶端與外掛,純H5線上視訊會議系統,支援微信小程式、H5頁面、APP、PC客戶端等接入方式,極大地滿足了語音視訊社交、線上教育和培訓、視訊會議和遠端醫療等場景需求。

在 EasyRTC 中,需要將所有的線上使用者儲存在記憶體中加快速度。在最開始的設計中,會將所有的線上使用者儲存在 map 中,但是map是存在垃圾回收的,在垃圾回收的時候會出現停頓,並且還需要考慮後期資料量的增加,因此採用快取庫。經過調研一段時間後,確認使用 fastcache。

package main

import (

"fmt"

"github.com/VictoriaMetrics/fastcache"

func main() {

// 初始化 cache, 其中 1024 為儲存的最大資料,可以根據使用場景調整

c := fastcache.New(1024)

defer c.Reset()

for i := 0; i < 100; i++ {

k := []byte(fmt.Sprintf("key %d", i))

v := []byte(fmt.Sprintf("value %d", i))

fmt.Println(len(v))

// 設定 key

c.Set(k, v)

vv := c.Get(nil, k)

if string(vv) != string(v) {

fmt.Println("unexpected value for key %q; got %q; want %q", k, vv, v)

} else {

fmt.Println("set value ok", string(vv))

}

c.Del(k)

vv = c.Get(nil, k)

if len(vv) > 0 {

fmt.Println("unexpected non-empty value got for key %q: %q", k, vv)

} else {

fmt.Println("delete value ok", string(vv), string(k))

}

}

}

拓展:

FAST Cache,即高速緩衝儲存器,其原始意義是指存取速度比一般隨機存取記憶體(RAM)來得快的一種RAM,一般而言它不像系統主記憶體那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術,也有快取記憶體的名稱。

FAST CACHE為儲存系統提供Flash驅動器級別的效能,增加了IOPS處理能力的同時,僅將熱點資料置於Flash盤內,降低成本。