簡體   English   中英

Redis-排序字典

[英]Redis - Sorted Dictionary

Redis具有數據結構排序集,可讓您創建按某個得分值排序的集。

我正在嘗試解決幾個問題

  1. 我需要存儲相似的成員,但得分不同(套組不可能)。 一種解決方案是將分數與原始值連接起來並將其存儲為值,但這有點丑陋。

  2. 每個分數只需要一名成員,而且我需要一種方法來強制實施。

  3. 我需要能夠按分數更新或刪除成員,例如在字典中。

我要查找的最好的示例是訂單簿,我需要能夠設置一定價格的數量,刪除價格並檢索數量以及按價格排序的價格

SET orderBook_buy 1.17 30000
SET orderBook_buy 1.18 40000
SET orderBook_buy 1.19 40000
SET orderBook_buy 1.17 35000 // Override the previous value of 1.17
DEL orderBook_buy 1.18 // 1.18 was sold out

我認為如果將排序集和哈希表結合起來就可以做到

我把價格分類整理

ZADD orderBook_buy_prices 1.17 1.17
...
ZREM orderBook_buy_prices 1.18

以及哈希表中的金額(按價格)

HSET orderBook_buy 1.17 35000
...
HDEL orderBook_buy 1.17

它可以工作,但我每次必須進行2次讀取和2次寫入,並且還要確保該寫入在事務內。

redid中是否有數據結構支持開箱即用的排序字典(可能是模塊)?

謝謝。

它可以工作,但我每次必須進行2次讀取和2次寫入,並且還要確保該寫入在事務內。

您還希望在事務中進行讀取,除非您不在乎可能的讀取一致性問題。

redid中是否有數據結構支持開箱即用的排序字典(可能是模塊)?

排序集就是這樣,但是您要查找的是一個單一數據結構,該結構是一種帶排序的雙向字典(盡管僅對鍵/值的一個子集<-取決於您來自的方向) 。

您將兩個現有結構“焊接”在一起的方法是完全有效的,並且已經指出了關於兩個鍵和事務性的約束。 您可以使用Lua腳本來包裝邏輯,而不必擔心事務,但是您仍然可以通過兩個操作讓它觸摸2個鍵。

AFAIK沒有實現此數據結構的Redis模塊ATM(盡管應該可以寫一個)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM