我正在使用Flutter创建一个字符猜测游戏移动应用程序,并使用Node.js & Express.js作为后端。移动应用程序应该调用接口从MongoDB数据库中获取所有字符的类别,该接口将它们返回给移动应用程序(并在此过程中缓存它们1天),移动应用程序将这些类别和它们的数据保存在一个数组中,然后再次调用该接口从数据库中获取一个随机字符。
该接口的代码如下:
const express = require('express');
const app = express();
// Get All Categories
app.get('/categories/all', async (request, response) => {
response.set('Cache-Control', 'public, max-age=86400, s-maxage=86400'); // 86,400 Seconds = 1 Day
response.send(await mongodbDriver.getAllCategories());
});
// Get One Character Randomly
app.get('/characters/one/random', async (request, response) => {
response.send(await mongodbDriver.getRandomCharacter());
});缓存架构应该类似于链接中的图像:
https://i.ibb.co/S3wYkhd/Caching-Server-Architecture.jpg
如果有一天我添加了一个新类别,将字符添加到该类别中,API返回了一个包含该新类别的随机字符,但移动应用程序没有关于它的数据,因为当它获取所有类别时,缓存服务器会使用它们的旧版本进行响应,并且该字符的新类别不在获取的类别中。
当这种情况发生时,我希望移动应用程序通过将请求发送到Node.js接口并调用缓存清除方法,或者通过直接将请求发送到缓存服务器,来从缓存服务器发送清除缓存的请求。这样的事情有可能发生吗?
发布于 2020-06-05 13:13:02
我找到了一个变通的方法。如果我担心我可以得到一个旧版本的categories数组,该数组不包括新添加的类别,并且我查询一个随机字符,并且该字符与该数组中缺少的新类别一起返回。我应该向API发出第三个请求,通过ID获取类别,然后将其添加到数组中。这样问题就解决了。
https://stackoverflow.com/questions/62178772
复制相似问题