2013-07-08 57 views
2

我有Socket.IO掛接到RedisStore,使用「socket.set()」將它的信息存儲在我的redis數據庫中。Socket.IO&Redis(這一切都去哪裏了?)

它通過創建某種形式的隨機密鑰來實現這一點,我只能假設它是套接字的唯一標識符。

我的問題是這樣的。從我所看到的數據中我保存的數據永遠不會被刪除,除非我以某種方式手動刪除它。每一個新的套接字都被保存並存儲,但是舊的套接字不會被刪除,除非我在斷開連接的情況下執然而,這意味着如果我重新啓動節點或發生崩潰等,這些數據將永遠存在。

我的目標是試圖找到清理舊密鑰數據庫的地方。我的問題是,我很難找到找到這些舊鑰匙的好方法。

關於我想到的解決方案的想法是將這些鍵名存儲在某種類型的集合中。然後我可以遍歷它們並檢查它們是否在啓動時仍在使用。但是,據我所知,我無法找到正在使用的密鑰。

另一個雖然是我可以嘗試和遍歷所有的鍵,但這似乎是一個壞主意。我也無法正確區分他們使用的密鑰和我使用的密鑰,除非我特別避免使用特定長度的密鑰。

所以我的問題是,如果任何人有一個好的方法來保持我的數據庫清潔,或者如何跟蹤socket.io在我的數據庫中使用的密鑰。

感謝, 薩米

附:如果您需要更多信息或者我不清楚,請告訴我,我會盡我所能解釋。

回答

1

如果問題只是需要刪除不使用的密鑰,爲什麼不使用Redis的'ttlexpire。您可以在每次使用或其中設置過期值,並將其設置爲非常高。如果某些事情沒有用,例如一週,它會在幕後自動被刪除。

+0

這解決了我添加自己的密鑰的問題,但沒有通過socket.io添加公用密鑰套件 如果在節點正在運行時關閉套接字,則套接字將從redis數據庫中移除(通過socket.io)。如果節點關閉或崩潰,則不會發生。它只是永遠坐在數據庫中(除非我失去了一些東西)。 據我可以告訴我無法得到由socket.io使用的密鑰。但如果我能我手動解決這個問題(通過設置他們的EXPIRE)。 – Pluckerpluck

+0

發現套接字有一個屬性socket.id,它可以讓我這樣做。然後我使用到期。謝謝。 – Pluckerpluck