記憶體資料庫應用之NBA籃球圖文直播室儲存設計(Redis版)
1.1 摘要
上一篇《記憶體資料庫應用之NBA籃球圖文直播室儲存設計》針對NBA籃球直播室的需求規格做了詳細的介紹,其中儲存設計是基於Memcached記憶體結構特點進行。本文針對相同的業務規則和需求,採用Redis實現相同的功能,只是儲存結構發生了變化。考慮到介紹Redis的資料網上已經很多,本文不再重複介紹,感興趣的可自行學習,在這裡只重點介紹Redis的實際應用。為了行文方便,所有針對資料的操作均使用命令列執行。
1.2 實驗環境
表1: 實驗環境
項 |
值 |
備註 |
作業系統 |
RHEL6.0.2 |
|
Redis版本 |
2.6.13 |
|
1.3 儲存設計
1.3.1 實時資料
1.3.1.1 實時比分
Memcached儲存的資料型別是字元型,而實際操作過程中,需要用到的資料型別是整型,因此每次進行資料操作時,都需要進行資料型別轉換。Redis儲存型別仍然為字元型(string),但是針對字元操作提供了計數操作提供了封裝,具體操作命令如下:
incr(key):名稱為key的string增1操作
incrby(key, integer):名稱為key的string增加integer
decr(key):名稱為key的string減1操作
decrby(key, integer):名稱為key的string減少integer
示例指令碼如下:
Incrby NBA.YYYYMMDD.XX.HOST.SCORE 2 (兩分球)
Incrby NBA.YYYYMMDD.XX.HOST.SCORE 3 (三分球)
Incrby NBA.YYYYMMDD.XX.HOST.SCORE 1 (罰球)
1.3.1.2 單節比分
單節比分可以採用與實時比分相同的儲存策略,考慮到一場比賽分為多節,特殊情況下會包含單個或多個加時的情況,採用Redis儲存時我們採用Hash結構儲存相關資料。涉及相關操作包括:
hset(key, field, value):向名稱為key的hash中新增元素field<—>value
hget(key, field):返回名稱為key的hash中field對應的value
hmget(key, field1, …,field N):返回名稱為key的hash中field i對應的value
hmset(key, field1, value1,…,field N, value N):向名稱為key的hash中新增元素field i<—>value i
hincrby(key, field, integer):將名稱為key的hash中field的value增加integer
操作指令碼如下所示:
HSET NBA.YYYYMMDD.XX.HOST.ESCORE 1 0
HSET NBA.YYYYMMDD.XX.HOST. ESCORE 2 0
HINCRBY NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一節得分增加兩分
HINCRBY NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一節得分增加兩分
HGET NBA.YYYYMMDD.XX.HOST. ESCORE 1 獲取第一節得分
HGET NBA.YYYYMMDD.XX.HOST. ESCORE 1 2 第一節、第二節得分
1.3.1.3 場上隊員
Redis支援List結構,所有針對當前場上隊員資訊的儲存採用List,這一點區別於Memcached針對每一個球員位置的設定。相關操作命令如下:
rpush(key, value):在名稱為key的list尾新增一個值為value的元素
lpush(key, value):在名稱為key的list頭新增一個值為value的 元素
lrange(key, start, end):返回名稱為key的list中start至end之間的元素(下標從0開始,下同)
ltrim(key, start, end):擷取名稱為key的list,保留start至end之間的元素
lindex(key, index):返回名稱為key的list中index位置的元素
lset(key, index, value):給名稱為key的list中index位置的元素賦值為value
lrem(key, count, value):刪除count個名稱為key的list中值為value的元素。
lpop(key):返回並刪除名稱為key的list中的首元素
rpop(key):返回並刪除名稱為key的list中的尾元素
我們呼叫LPUSH命令,將每一個隊員的資訊儲存連結串列,需求獲取當前場上隊員資訊是,呼叫lrange命令獲取當前在場上的5位隊員。這裡面的區別好處打大家可以慢慢體會。示例指令碼如下:
LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 康利
LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 加索爾
LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 蘭多夫
LPUSH NBA.YYYYMMDD.XX.HOST.MEMBER 李
…
LRANGE NBA.YYYYMMDD.XX.HOST.MEMBER 0 4
備註:在這裡我們將List按照佇列方式使用,通過讀取前5位資料,獲取當前場上隊員資訊。
本節犯規、剩餘長暫停、剩餘短暫停採用string儲存,有實時比分儲存方式相同。
1.3.2 文字直播
文字直播採用List進行儲存,可以儲存設定List的長度,儲存當前多少條直播資訊。具體使用方法與場上隊員相同。
相關文章
- Redis 記憶體優化神技,小記憶體儲存大資料Redis記憶體優化大資料
- 快閃記憶體將改變資料庫儲存引擎的設計記憶體資料庫儲存引擎
- 記憶體中的資料儲存記憶體
- 解讀記憶體資料庫的儲存需求RC記憶體資料庫
- 資料儲存位置記憶體圖及一個題目記憶體
- 資料庫設計:儲存過程主體資料庫儲存過程
- Redis 記憶體使用優化與儲存Redis記憶體優化
- 也談應用之“基石”——資料庫設計資料庫
- Redis記憶體使用最佳化與儲存Redis記憶體
- 一文帶你瞭解 「圖資料庫」Nebula 的儲存設計和思考資料庫
- 資料庫設計:儲存過程資料庫儲存過程
- 揭祕RedisGraph: Redis內嵌高效能記憶體圖資料庫Redis記憶體資料庫
- 資料庫表設計之儲存引擎資料庫儲存引擎
- Fdmemtable 記憶體表儲存圖片的例子記憶體
- 如何儲存/恢復Java應用程式核心記憶體資料現場?Java記憶體
- Nebula 架構剖析系列(一)圖資料庫的儲存設計架構資料庫
- NBA球星是如何投籃的?把詹姆斯、庫裡的投籃資料圖3D列印出來3D
- InnoDB儲存引擎——記憶體儲存引擎記憶體
- NBA 2K23 Arcade Edition for Mac(籃球遊戲)Mac遊戲
- 記憶體資料庫記憶體資料庫
- double型別資料在記憶體中中儲存格式型別記憶體
- 資料儲存--面向列的儲存設計
- 設計一款籃球經理類遊戲:球員屬性遊戲
- Mongodb記憶體資料庫MongoDB記憶體資料庫
- 設計一款籃球經理類遊戲(二):球員二級屬性與資料屬性遊戲
- 【虹科分享】Redis 不僅僅是記憶體資料庫Redis記憶體資料庫
- 【Redis】redis各型別資料儲存分析Redis型別
- NBA 2K23 Arcade Edition for Mac(籃球模擬遊戲)Mac遊戲
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 儲存類別和記憶體管理記憶體
- 圖資料庫設計實踐 | 儲存服務的負載均衡和資料遷移資料庫負載
- 【記憶體資料庫】TimesTen記憶體資料庫
- 記憶體資料庫如何發揮記憶體優勢?記憶體資料庫
- Redis資料儲存位置匯出資料Redis
- 設計一款籃球經理類遊戲(三):球隊的設計遊戲
- redis-5.資料儲存格式Redis
- Redis資料儲存和讀寫Redis
- 【大頁記憶體】Oracle資料庫配置大頁記憶體記憶體Oracle資料庫