缓存 firebase 函数输出以减少数据库调用

问题描述 投票:0回答:1

我已经使用 firebase firestore 和函数实现了排行榜。我想缓存函数的输出/或绕过它并通过缓存为使用此函数的应用程序提供服务。假设我将其缓存了 3 小时。有没有一种方法可以使用可调用函数在 firebase 上实现此目的?我的应用程序是用 flutter 构建的。

exports.getScores = functions
    .runWith({
        enforceAppCheck: true, // Reject requests with missing or invalid App Check tokens.
    })
    .https.onCall(async (data, context) => {
        console.log('enforceAppCheck');
        try {
            const scoreQ = await admin.firestore().collection("players")
                .orderBy("score", "desc")
                .limit(7)
                .get();

            return scoreQ.docs.map((doc) => {
                return {
                    player: doc.id,
                    score: doc.data().score,
                    mates: doc.data().checkmates,
                    kos: doc.data().knockouts,
                    level: doc.data().level,
                };
            });

        } catch (e) {
            functions.logger.log("error occured", e);
            return (e);
        }
    });
flutter firebase google-cloud-firestore google-cloud-functions
1个回答
0
投票

Cloud Functions 或 Firestore 中没有针对该特定用例构建任何内容,但您可以非常轻松地自行构建。

  1. 首先确保已启用缓存。它默认启用,因此您无需执行任何操作,除非您之前将其关闭。
  2. 现在,当您运行 Firestore 查询时,数据将缓存在设备上。
  3. 此时,还将当前时间戳写入某种形式的本地存储中。
  4. 然后每当您要加载数据时,请检查本地存储中的时间戳是否小于 3 小时前。
    1. 如果小于3小时前,通过指定source: Source.cache
      强制从缓存加载数据
    2. 如果超过 3 小时,则照常从服务器加载数据 - 这也会更新缓存。

注意:强制从缓存中获取数据的选项最近才添加到 Firestore API,因此请务必使用最新版本的 SDK。

© www.soinside.com 2019 - 2024. All rights reserved.