我使用django的默认站点地图应用程序实现了一个简单的站点地图类。由于需要很长时间来执行,我添加了手动缓存:在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的有决定何时应该划分网站地图文件到smalled的传输的自动方法。根据该文档(http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):
您应该创建一个索引文件,如果一个 您的Sitemaps有超过50,000 网址。在这种情况下,Django会自动将 分页, 并且索引将反映这一点。
您认为启用缓存站点地图的最佳方式是什么? - 黑客进入Django站点地图框架来限制单个站点地图大小,比方说,10,000条记录似乎是最好的主意。为什么首先选择了50,000个? Google的建议?随机数? - 或者也许有办法允许memcached存储更大的文件? - 或者可能已保存,网站地图应作为静态文件提供?这意味着,不要使用memcached缓存,我必须手动将结果存储在文件系统中,并在下次请求站点地图时从中检索结果(可能每天在cron作业中清理目录)。
所有这些似乎非常低的水平,我想知道,如果一个显而易见的解决方案存在...
不要做“结果!=无”,总是做“结果不是无” – stefanw 2010-01-17 19:13:39
这是为什么?有什么不同? – michuk 2010-01-28 23:33:27
50,000是在Sitemaps协议中给出的。 – webjunkie 2010-08-15 10:12:55