【问题标题】:Firebase Admin Node.js SDK Caching ApproachFirebase Admin Node.js SDK 缓存方法
【发布时间】:2019-08-23 01:33:01
【问题描述】:

我正在使用 RESTful API 构建一个服务(假设它是一个简单的公告平台),并且我使用 Firebase (Cloud Firestore) 作为我的数据库。

我只使用 Firebase 管理 SDK,这意味着每次读/写都通过我的 Node.js 服务器。由于 Firebase 管理 SDK 没有离线缓存/持久性,因此每次我的“读取请求”都很重要。

示例代码:

app.get('/message/:cid', async (ctx) => {
    const msg = await admin.firestore().collection('messages').doc(ctx.params.cid).get();
    await ctx.render('message', { ...msg.data() });
});

我正在考虑是否可以做一些 LRU 缓存来保存我最近的公告消息,这样它不仅可以节省 Firebase 的使用量,还可以节省一些时间。这是一个好方法吗?对于性能和使用。提前致谢。

【问题讨论】:

    标签: node.js firebase google-cloud-firestore firebase-admin


    【解决方案1】:

    添加 LRU 缓存以提高性能(在这种情况下还可以降低成本)听起来是一种合理的方法。

    当然也要花一些时间考虑缓存失效。如果 /messages 发生变化,您如何知道,以及如何防止从缓存中提供陈旧的内容?

    一种典型的方法可能是使用更持久的侦听器,它们保持与 Firestore 的开放连接。例如,start listening for realtime updates 当您将某些内容添加到缓存时,并在该项目从该案例中删除时删除侦听器。如果侦听器触发更新,您可以更新缓存中的项目。这仍然可以让您减少读取次数,但同时确保您永远不会提供过时的内容。

    【讨论】:

    • 我没有考虑使用监听器,因为我构建了自己的API,这意味着每个编辑、删除消息的请求都会经过我的服务器,我可以在那个时候删除缓存。
    • 任何时候 => 酷。只需考虑如何使过时的内容过期,因为使用生存时间并不是最理想的,而实时侦听器可以更轻松地维护始终保持最新的缓存。
    猜你喜欢
    • 2020-03-27
    • 2019-10-23
    • 2021-06-23
    • 1970-01-01
    • 2018-03-20
    • 2017-03-26
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多