加快常用的Django随机查询速度

发布于 2024-11-30 20:25:09 字数 352 浏览 1 评论 0原文

我设置了一个查询,将数据库中的 28 条随机记录放入 JSON 响应中。这个页面经常被点击,每隔几秒钟,但目前对于我来说太慢了。

在 JSON 响应中,我有:

  • ID 的
  • 用户名
  • Base64 缩略图

这些都来自三个链接表。
我很想听到其他一些解决方案,而不是用户简单地点击页面、查找 28 条随机记录并返回响应。我的一个想法是:

  • 运行一个进程,每隔 30 秒左右使用 JSON 响应创建一个缓存页面。

这是一个好的选择吗? 如果是这样,我很想知道这是如何完成的。

再次感谢,
希望大家都好

I've got a query set up that puts 28 random records from a database into a JSON response. This page is hit often, every few seconds, but is currently too slow for my liking.

In the JSON response I have:

  • ID's
  • Usernames
  • a Base64 thumbnail

These all come from three linked tables.
I'd be keen to hear of some other solutions, instead of users simply hitting a page, looking up 28 random records and spitting back the response. One idea I had:

  • Have a process running that creates a cached page every 30 seconds or so with the JSON response.

Is this a good option?
If so, I'd be keen to hear how this would be done.

Thanks again,
Hope everyone is well

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

物价感观 2024-12-07 20:25:10

Django 支持多种缓存方法,包括内置缓存和 memcached。我将选择文档中的方法之一,并为您的 json 响应创建特定视图。然后,您可以使用 @cache_page 装饰器并指定特定时间。

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

https://docs.djangoproject.com/en/1.3/topics/cache/

Django supports a variety of caching methods, both built-in and memcached. I would select one of the methods in the documentation, and create a specific view for your json response. You could then use the @cache_page decorator and specify a particular time.

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

https://docs.djangoproject.com/en/1.3/topics/cache/

等风也等你 2024-12-07 20:25:10

如果表通过外键链接,可能 使用 select_lated?从链接中,他们给出了示例(您需要向下滚动一点):

>>> e = Entry.objects.select_related().get(id=2)
>>> print e.blog  # Doesn't hit the database; uses cached version.
>>> print e.blog  # Doesn't hit the database; uses cached version.

我不确定三个表,但它适用于两个表。

If the tables are linked via foreign key, maybe using select_related? From the link, the example they give (you'll need to scroll down a bit):

>>> e = Entry.objects.select_related().get(id=2)
>>> print e.blog  # Doesn't hit the database; uses cached version.
>>> print e.blog  # Doesn't hit the database; uses cached version.

I'm not sure about three tables, but it works well for two.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文