【问题标题】:Model based caching instead of view based caching in djangodjango中基于模型的缓存而不是基于视图的缓存
【发布时间】:2020-01-22 15:59:39
【问题描述】:

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

提供建议的主要逻辑是:

  1. 用户今天有没有待处理的任务? (从 UserTaskModel 查询)

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

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

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

【问题讨论】:

    标签: django django-models django-queryset django-cache django-caching


    【解决方案1】:

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

    • 假设你想缓存每天的天气,设置过期时间+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
    

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

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 1970-01-01
      • 2011-05-13
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多