Redis 如何在 Trello 中使用?
Posted
技术标签:
【中文标题】Redis 如何在 Trello 中使用?【英文标题】:How is Redis used in Trello? 【发布时间】:2012-01-24 15:30:21 【问题描述】:我了解,粗略地说,Trello 使用 Redis 进行临时数据存储。
是否有人能够进一步详细说明它在应用程序中的作用?
【问题讨论】:
【参考方案1】:我们在Trello 上使用 Redis 来存储我们不会丢失的临时数据。我们不会将 Redis 中的数据持久化到磁盘,我们使用它allkeys-lru,所以我们只存储可以随时踢出的东西,只会给用户带来非常小的不便(例如,暂时看到不正确的用户状态)。话虽如此,我们为它提供了 5 倍以上的空间来存储其实际工作集并从 10 个到期密钥中进行选择,因此我们真的从来没有看到我们正在使用的任何东西被踢出。
这是我们的发布订阅服务器。当用户对板或卡做某事时,我们希望向所有订阅了更改对象的 websocket 连接的客户端发送带有该增量的消息,因此我们所有的 Node 进程都订阅了传播的 pubsub 通道这些消息,并将其传播到适当许可和订阅的 websocket。
我们使用它来支持 socket.io,但由于我们只使用 websockets,并且由于 socket.io 是 too chatty 以按照我们目前需要的方式扩展,我们有一个补丁禁用除我们必需的一个频道以外的所有频道。
对于没有 websocket 的用户,我们必须保留自用户上次轮询请求以来在每个对象通道上发生的操作的列表。为此,我们使用了一个列表,该列表限制为最近的 100 个元素,以及一个辅助计数器,用于记录自创建以来已将多少元素添加到列表中。因此,当我们从这样的浏览器响应轮询请求时,我们可以检查它报告它看到的最后一个元素,并且只发送从那时起添加到队列中的任何消息。因此,在大多数情况下,这会将轮询请求简化为权限检查和单个 Redis 密钥检查,这非常快。
我们在 Redis 中存储了一些关于连接用户的活动状态的临时数据,因为这些数据经常变化,没有必要将其持久化到磁盘。
我们存储短期密钥以支持 Redis 中的 OAuth 登录。
我们喜欢 Redis;一旦您启动并运行了它的实例,您就想将它用于各种事情。我们遇到的唯一真正麻烦是slow-consuming clients eating up the available space。
我们使用 MongoDB 来满足我们更传统的数据库需求。
【讨论】:
非常感谢布雷特。哦,恭喜你构建了这么棒的应用程序:) @Brett,您是否使用 redis 进行用户会话数据和权限检查?谢谢! @paulkon 不,这主要在客户端和 MongoDB 中。 这是一个非常有趣的用例。我确信这仍然适用,并且想知道 Trello 可能如何超越其 2012 年的基础架构。 :)【参考方案2】:Trello 使用 Redis 和 Socket.IO (RedisStore) 进行扩展,具有以下两个特点:
键值存储,为连接的客户端设置和获取值 作为发布-订阅服务资源:
在这里查看 Socket.IO 中 RedisStore 的代码:https://github.com/LearnBoost/socket.io/blob/master/lib/stores/redis.js
带有 RedisStore 的 Socket.IO 示例:http://www.ranu.com.ar/2011/11/redisstore-and-rooms-with-socketio.html
【讨论】:
以上是关于Redis 如何在 Trello 中使用?的主要内容,如果未能解决你的问题,请参考以下文章
Trello 如何在 MongoDB 中存储数据? (每板收集?)