当前位置:  开发笔记 > 编程语言 > 正文

在django中缓存站点地图

如何解决《在django中缓存站点地图》经验,为你挑选了1个好方法。

我使用django的默认站点地图应用程序实现了一个简单的站点地图类.由于执行时间很长,我添加了手动缓存:

class ShortReviewsSitemap(Sitemap):
    changefreq = "hourly"
    priority = 0.7

    def items(self):
        # try to retrieve from cache
        result = get_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews")
        if result!=None:
            return result

        result = ShortReview.objects.all().order_by("-created_at")

        # store in cache
        set_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews", result)

        return result

    def lastmod(self, obj):
        return obj.updated_at

问题是memcache只允许最大1MB的对象.这个比1MB大,所以存入缓存失败:

>7 SERVER_ERROR object too large for cache

问题是django有一种自动的方法来决定何时应该将站点地图文件划分为较小的站点地图文件.根据文档(http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):

如果您的某个站点地图的网址超过50,000,则应创建索引文件.在这种情况下,Django将自动对站点地图进行分页,索引将反映出来.

您认为启用缓存站点地图的最佳方式是什么? - 攻击django sitemaps框架以限制单个站点地图大小,比方说,10,000个记录似乎是最好的主意.为什么首先选择了50,000个?谷歌的建议?随机数? - 或许有一种方法可以让memcached存储更大的文件? - 或者也许保存了onces,站点地图应该作为静态文件提供?这意味着不是使用memcached进行缓存,而是必须手动将结果存储在文件系统中,并在下次请求站点地图时从那里检索它们(可能每天在cron作业中清理目录).

所有这些似乎都很低级,我想知道是否存在明显的解决方案......



1> Oduvan..:

50k它不是一个核心参数.:)

您可以使用此类代替django.contrib.sitemaps.GenericSitemap

class LimitGenericSitemap(GenericSitemap):
    limit = 2000

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有