我了解,粗略地说,Trello使用Redis进行临时数据存储。
有谁能够进一步详细说明它在应用程序中扮演的角色?
我们在Trello上使用Redis 来存储临时数据,这样就不会丢失。我们不会将Redis中的数据持久化到磁盘上,而是使用allkeys- lru,因此我们只存储可以随时踢出的内容,给用户带来的不便很小(例如,暂时看到错误的用户状态)。话虽这么说,我们为它提供了存储实际工作集所需空间的5倍以上,并从10个密钥中进行选择以期满,因此我们真的从来没有看到我们正在使用的任何东西被踢出。
这是我们的pubsub服务器。当用户对板或卡进行操作时,我们希望向订阅了已更改对象的所有与Websocket连接的客户端发送带有该增量的消息,因此我们所有的Node进程都订阅了一个pubsub通道,该通道传播这些消息,然后将其传播到适当的许可和订阅的Websocket。
我们排序使用它来支持socket.io,但是由于我们仅使用websockets,并且因为socket.io 太闲谈而无法像我们目前所需要的那样进行扩展,所以我们有一个补丁可以禁用除一个通道之外的所有通道。对我们来说是必要的。
对于没有WebSocket的用户,我们必须保留自用户上次轮询请求以来在每个对象通道上发生的操作的列表。为此,我们使用一个列表,该列表限制最近的100个元素,并使用辅助计数器来计算自列表创建以来已经添加了多少个元素。因此,当我们从这样的浏览器回答轮询请求时,我们可以检查它报告它已经看到的最后一个元素,并且仅向下发送此后添加到队列中的所有消息。因此,在大多数情况下,轮询请求可以简化为权限检查和单个Redis密钥检查,这非常快。
我们在Redis中存储一些有关已连接用户的活动状态的临时数据,因为这些数据经常更改,因此无需将其持久保存到磁盘。
我们存储短期密钥以支持Redis中的OAuth登录。
我们爱Redis;一旦启动并运行了它的实例,便想将其用于各种用途。我们遇到的唯一真正的麻烦是慢速客户占用了可用空间。
我们将MongoDB用于更传统的数据库需求。