我使用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
问题在于Memcached最多只允许一个1 MB的对象。这个大于1 MB,因此将其存储到缓存失败:
>7 SERVER_ERROR object too large for cache
问题在于Django有一种自动的方式来决定何时将站点地图文件分成较小的文件。根据文档:
如果您的一个站点地图具有超过50,000个URL,则应创建一个索引文件。在这种情况下,Django将自动对站点地图进行分页,索引将对此进行分页。
您认为启用缓存站点地图的最佳方法是什么?
所有这些似乎水平都很低,我想知道是否存在明显的解决方案…
50k不是硬编码参数。
您可以改用 django.contrib.sitemaps.GenericSitemap 类:
class LimitGenericSitemap(GenericSitemap): limit = 2000