【问题标题】:Django Cache + Django Database requestDjango 缓存 + Django 数据库请求
【发布时间】:2013-07-30 18:29:24
【问题描述】:

我正在构建一个 Django Web 应用程序,它允许用户从计算机系统中选择一张照片并继续填充到用户时间轴上。时间线最初会显示 10 张照片,然后拉动刷新以获取时间线上的下 10 张照片。

所以我的第一个问题是我能够上传存储在文件系统上的图像,但我如何只显示前 10 个然后刷新以获取下一个 10 等等开。

接下来,我希望应用的用户体验更快。所以,我正在考虑缓存。所以,我在想,我要缓存什么。由于 Django 中有 3 种缓存类型-Database cache, MemCache, or FileSystem Caching。 所以我的 secon 问题是我应该缓存每个用户的前 10 张照片还是其他什么?

请回答您的建议。

【问题讨论】:

    标签: django django-database django-cache django-caching


    【解决方案1】:

    所以我的第一个问题是我能够上传存储在文件系统上的图像,但是我如何只显示前 10 个然后刷新以获取下一个 10,依此类推。

    使用您的初始逻辑获取前 10 张照片,然后按时间顺序获取下一张照片。您必须有一些与您的照片发布相关的时间戳。据此获取图像。您可以为此使用 Django Paginator

    我要缓存什么

    无论您想经常向用户显示什么静态数据,并且不会立即更改。您可以为每个用户或所有用户缓存。根据您选择要缓存的内容。

    我应该缓存每个用户的前 10 张照片还是别的什么

    取决于你。这些第一张图片对所有用户来说都是通用的吗?然后就可以缓存了。如果不是,并且图片取决于用户,则缓存它们没有意义。无论如何,用户都必须获取第一张图像。而且我非常怀疑用户是否会经常要求相同的前 10 张照片。再次,这是你的逻辑。如果您认为缓存会有所帮助,您可以继续缓存。

    【讨论】:

    • 关于缓存部分的很好的信息指南,但我有一个查询要获取接下来的 10 张图像。我的views.py 文件documents = Document.objects.filter(owner=request.user)[page_no:page_no+5] 中有这个声明。 page_no 最初从0 开始。我的模板中有一个next 按钮,它将获取我接下来的 10 张照片。所以,我正在考虑使用 jQuery+AJAX。那么,我将如何通过 jQuery 发送数据,说明应该显示哪组图片,即 11-20 或 21-30 或 31-40 等等。
    • 也可以使用Django自带的Paginator
    【解决方案2】:

    DiskCache 项目最初是针对类似问题(缓存图像)而创建的。它包含一些功能,可帮助您有效地缓存和提供图像。 DiskCache 是一个 Apache2 许可的磁盘和文件支持的缓存库,用纯 Python 编写,与 Django 兼容。

    diskcache.DjangoCache 提供了一个与 Django 兼容的缓存接口和一些额外的特性。特别是,getset 方法允许读取和写入文件。一个例子:

    from django.core.cache import cache
    
    with open('filename.jpg', 'rb') as reader:
        cache.set('filename.jpg', reader, read=True)
    

    稍后您可以获取对该文件的引用:

    reader = cache.get('filename.jpg', read=True)
    

    如果您只是想要磁盘上的文件名(在缓存中):

    try:
        with cache.get('filename.jpg', read=True) as reader:
            filename = reader.name
    except AttributeError:
        filename = None
    

    上面的代码从缓存中请求一个文件。如果没有这样的值,它将返回NoneNone 将导致 with 语句引发异常,因为它缺少 __exit__ 方法。在这种情况下,会捕获异常并将filename 设置为None

    使用文件名,您可以使用X-Accel-Redirect 之类的名称告诉 Nginx 直接从磁盘提供文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2023-03-06
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 2010-12-03
      • 2020-01-26
      相关资源
      最近更新 更多