簡體   English   中英

在Redis中存儲事件時間軸

[英]Storing an Event Timeline in Redis

我想在Redis的時間軸中存儲事件列表。 我考慮的是自1970年以來以秒為單位的排序集,可以快速查找和范圍搜索。

問題是我希望這些事件中的每一個都用幾個鍵(可能大約3個)表示一個對象,所以我要存儲一組排序的ID-然后應用程序將根據ID查找哈希。

所以談話會像這樣:

> ZRANGEBYSCORE events start end 
1) "16"
2) "17"
> HGETALL events:16
1) "key1"
2) "val1"
...
> HGETALL events:17
...

有沒有更好的方法來組織或執行避免應用程序為每個結果單獨調用的方法。 可以在redis服務器端完成所有操作以避免此開銷嗎? 這甚至是一個大問題嗎?

PS。 我正在使用節點客戶端,但是我的問題也適用於其他語言。

一個明顯的解決方案是按價值而不是參考。 因此,您的zset可以存儲序列化對象,而不是將引用存儲在這些對象上。 使用node,JSON易於使用。

現在,如果您需要保留當前結構(例如,某些對象由各種zset共享),則需要考慮漫游而不是命令。 Redis中昂貴的是往返,而不是O(1)命令本身的執行。

HGETALL不支持可變參數(即,您只能檢索一個哈希對象)。 但是Redis非常擅長處理流水線命令,並且由於節點的異步特性,這在node_redis驅動程序中特別容易實現。 因此,在您的示例中,您只需要2次往返:第一次執行ZRANGEBYSCORE,第二次執行所有HGETALL命令(即,在發出第二個HGETALL命令之前不要等待第一個HGETALL命令的結果)。 它將非常有效。

使用當前的Redis版本(2.4),無法消除第二次往返。

您可以對對象進行字符串化,然后使用JSON.stringify()將其存儲為字符串,然后使用JSON.parse()進行檢索。

暫無
暫無

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

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