【发布时间】:2020-01-24 05:49:48
【问题描述】:
我使用 Node.js、Socket.io 和 mongodb 开发了一个实时应用程序。它有一定的要求,当用户加载特定页面时,从 mongodb 获取大约 20000 个 x 和 y 坐标在 2 个特定日期之间的点,并在地图上呈现给客户端。现在,如果用户再次重新加载,则重复该过程。我很困惑如何使用什么键将这些点插入缓存中,以便当用户重新加载时,可以使用键轻松获取缓存中的值。 有什么建议么?谢谢!
【问题讨论】:
我使用 Node.js、Socket.io 和 mongodb 开发了一个实时应用程序。它有一定的要求,当用户加载特定页面时,从 mongodb 获取大约 20000 个 x 和 y 坐标在 2 个特定日期之间的点,并在地图上呈现给客户端。现在,如果用户再次重新加载,则重复该过程。我很困惑如何使用什么键将这些点插入缓存中,以便当用户重新加载时,可以使用键轻松获取缓存中的值。 有什么建议么?谢谢!
【问题讨论】:
你可以
完全编写自己的缓存层
在此处使用现有的缓存库(例如 lru-cache-模块 by isaacs, 这可能是该领域最受欢迎的)
可以使用redis 作为缓存(有 为插入的文档设置 TTL 的能力)已经有一个 mongoose-redis-cache-模块, 也许这有帮助
可能还有其他 x 个解决方案。这取决于您的数据规模/请求数量等。
【讨论】:
在这种情况下,缓存是您的数据库为您做的事情。 MongoDB 依赖操作系统的内存映射 I/O 进行存储。通用操作系统通常会将最常用的页面保存在内存中。如果您仍想使用额外的缓存,用于坐标的明显键是Geohash。
【讨论】:
这个库runtime-memcache 实现了lru 和其他一些javascript 缓存方案。使用 Node.js 并用 Typescript 编写。
它使用修改后的双向链表来实现 get、set 和 remove 的 O(1)。
【讨论】: