0

我正在开发一个 django 应用程序。该应用程序的主要任务是提供诸如“我今天应该出去吗?”之类的建议。只有一个端点可以获取建议,例如 example.com/。

提供建议的主要逻辑是:

  1. 用户今天有未完成的任务吗?(从 UserTaskModel 查询)

  2. 今天的天气舒服吗?(计算天气预报)

如果两个用户尝试在同一日期获取数据,则 UserTask 查询将不同。但是天气预报查询任务是一样的。如果我使用基于视图的 django 缓存,那么将为每个用户执行天气预报查询。但我想在同一日期为所有用户缓存天气查询数据。它可以通过为天气创建不同的视图来查看实施。但我不想为天气使用另一个端点。

Django 缓存 set-get 方法可用于此任务。但这种方式是完成此类任务的最佳方式吗?在我的示例中,我使用了一个简单的天气计算查询,具体取决于日期。但是这种技术对复杂的查询有用吗?

4

1 回答 1

0

正如您所说,缓存集获取是您的解决方案。但请注意这两件事:

  • 假设你想缓存每天的天气,设置过期时间+24h(缓存不会很快过期)
  • 此外,您的缓存键应该类似于weather_2019_09_22

我认为创建一个实用程序类可以非常好(像这样,这是一个伪代码)

class WeatherCache:
    def get(self):
        date = today()
        if forecast for date in cache:
            return forecast
        get forecast for date
        insert forecast into cache
        return forecast

另一个想法可以简单地创建一个模型并将预测放在那里,好处是您将保留预测的历史记录。也许它对以后的查询很有用(并且表不会变得太大,所以你不必担心)

于 2019-09-22T14:19:01.963 回答