我正在跟蹤Redis中多個Sorted Sets中的成員,以此作爲在成員上執行多列索引的方法。舉個例子,假設我有兩個Sorted Sets,lastseen
(這是紀元時間)和points
,並且我在這些Sorted集中存儲用戶名作爲成員。在Redis中,是否可以對多個Sorted集合中的成員進行排序?
我被lastseen
這樣我就可以得到最後一天或一個月內見過的用戶,那麼我想通過points
生成的成員排序,所以我有有效的最後一天內看到的成員希望第一個排序或按月份排序的月份。
這將是容易的,如果我能儲存呼叫的結果ZREVRANGEBYSCORE到一個新的有序集合(我們稱之爲新的有序集合temp
),因爲那時我可以排序lastseen
有限制,結果存入temp
,使用ZINTERSTORE針對temp
和points
,對於out
(存儲到result
),權重爲0,最後在result
上再次使用ZREVRANGEBYSCORE。但是,Redis沒有內置的方法將ZRANGE的結果存儲到新的Sorted Set中。
我使用here發佈的解決方案進行了研究,雖然它看起來正確地排序結果,但排序集合中的結果分數不能再用於根據時間精確限制結果(即只需要最後一天)。
例如:
redis> ZADD lastseen 12345 "foo"
redis> ZADD lastseen 12350 "bar"
redis> ZADD lastseen 12355 "sucka"
redis> ZADD points 5 "foo"
redis> ZADD points 3 "bar"
redis> ZADD points 9 "sucka"
我想什麼直到結束,假設我的時間窗口是12349
和12356
之間,會員['sucka', 'bar']
名單。
我沒有在Redis中存儲歷史數據。例如,我不是每次都看到用戶時,就是最後一次。這意味着,每次成員登錄時,我都會更新lastseen Sorted集,其中用戶名爲成員,當前紀元時間爲分數。 – Bryan
我的意思是,我沒有在Redis中存儲時間序列數據,只是最近的一次。是的,Sorted Sets在啓動時從PostgreSQL中填充,但我寧願查詢Redis而不是實時查詢PostgreSQL。無論如何,它並沒有真正改變我的問題 - 我可以輕鬆地使用一個呈現相同用例的不同示例。 – Bryan
我已經在OP中有。 – Bryan