【问题标题】:Socket.IO & Redis (Where does it all go?)Socket.IO 和 Redis(都去哪儿了?)
【发布时间】:2013-07-08 00:21:24
【问题描述】:

我已将 Socket.IO 连接到 RedisStore,这样使用“socket.set()”会将其信息存储在我的 redis 数据库中。

它通过创建某种形式的随机密钥来做到这一点,我只能假设它是套接字的唯一标识符。

我的问题是这个。据我所知,我保存的这些数据永远不会被删除,除非我以某种方式手动删除它。每个新的套接字都会被保存和存储,但除非我在断开连接时做一些事情,否则旧的永远不会被删除。但是,这意味着如果我重新启动节点或发生崩溃等,这些数据将永远存在。

我的目标是寻找某个地方来清理旧密钥的数据库。我的问题是我很难找到找到这些旧密钥的好方法。

我想到的解决方案是将这些键名存储在某种集合中。然后我可以遍历它们并检查它们在启动时是否仍在使用。但是,据我所知,我无法找到正在使用的密钥。

另一个虽然是我可以尝试遍历所有键,但这似乎是个坏主意。我也无法正确区分他们使用的键和我使用的键,除非我特别避免使用特定长度的键。

所以我的问题是,是否有人有保持数据库清洁的好方法,或者我如何跟踪 socket.io 在我的数据库中使用的密钥。

谢谢, 萨米

附言如果您需要更多信息或我不清楚,请告诉我,我会尽力解释。

【问题讨论】:

    标签: node.js redis socket.io


    【解决方案1】:

    如果问题只是需要删除不再使用的密钥,为什么不使用 Redis 的ttlexpire。您可以在每次使用时设置过期值,或一些类似的设置,并将其设置为非常高。如果某些内容在一周内没有使用,它会在幕后自动为您删除。

    【讨论】:

    • 这解决了我自己添加的密钥的问题,但不是 socket.io 添加的 kets 如果我在节点运行时关闭套接字,则从 redis 数据库中删除套接字(通过 socket.io )。如果节点关闭或崩溃,则不会发生这种情况。它只是永远存在于数据库中(除非我遗漏了什么)。据我所知,我无法获得 socket.io 使用的密钥。但如果可以的话,我可以手动解决这个问题(通过在它们上设置 EXPIRE)。
    • 发现套接字有一个属性 socket.id 可以让我这样做。然后我使用过期。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2014-03-15
    • 2015-07-17
    • 2012-10-30
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多