搜尋

首頁  >  問答  >  主體

如何使用Redis建構複雜資料結構

最近在做一個測試回歸的係統,Server這邊需要在每個Test執行的時候為它保留相關的數據,待測試結束後,刪掉這些數據。

也就是這個數據隻是臨時的,一般一次測試用例大概就幾分種,因此單挑數據的存在時間非常短。所以想要選用Redis做數據存儲。

之前沒有使用Key-Value數據存儲的經驗,我這邊簡單構想的單挑數據結構如下:

{
    sessionId: 123454,
    gloablData: {}, // 在全局维持的数据
    testWins: [
        { winId: 123, parentWinId: 123, stats: 'running', testResult: {}
        }
    ]
}

其中testWinds為測試用所有可能會出現的窗口(窗口其實為瀏覽器窗口,這個可以無視),然後會為每個窗口記錄信息,然後每個窗口有自己的子測試結果testResult,是一個複雜數據(但是可以用JSON字符串來儲存,因為Server對它的具體內容不關心,輸出給需要的接口就行了),globalData也一樣,server不關心,設置成JSON字符串

但是查看Redis文檔,發現Redis貌似無法構建這麼複雜的數據結構。

因此針對這樣的需求,該如何設置這個數據庫的結構?

我這邊的簡單設置是這樣的:

對於每次測試:

有一條儲存globalData:

session_id:globalData

和多條儲存testWin數據:

session_id:testWind_id

其中globalData由於我這邊的Server不關心也不會做查詢,因此隻保存JSON字符串,testResult也一樣,這樣的話,貌似其實就兩種類型:

session_id:testWind_id: { winId: 123, parentWindId: 123, stat: 'running', testResult: JSONString }

session_id:globalData: JSONString
PHPzPHPz2799 天前952

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-04-21 10:59:28

    儲存和使用可以用物件封裝。

    針對你的情況,我會如此存。

    Key : "session:123454:globalData" Value: hash 這裡存屬性hash. (hget, hset)
    Key : "sesison:123454:testWins" Value: list 儲存 test wins' ids
    Key : "session:123454:testWins:win_id" Value: hash 這裡存wins屬性hash,也就是你json串的東西。

    儲存這樣,使用還是要用物件封裝起來

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-21 10:59:28

    換MongoDB吧。看樣子你是需要基於文檔的資料庫。

    回覆
    0
  • 取消回覆