Python 图像缓存选项
我正在运行一个用python和jinja2编写的google应用程序引擎网站。我已经让memcached处理数据库中的大部分内容,我不清楚如何提高blobstore提供的图像的效率。我认为它在GAE上与任何其他框架都不会有太大的不同,但我想提到它以防万一Python 图像缓存选项,python,google-app-engine,caching,distributed-caching,image-caching,Python,Google App Engine,Caching,Distributed Caching,Image Caching,我正在运行一个用python和jinja2编写的google应用程序引擎网站。我已经让memcached处理数据库中的大部分内容,我不清楚如何提高blobstore提供的图像的效率。我认为它在GAE上与任何其他框架都不会有太大的不同,但我想提到它以防万一 无论如何,有什么推荐的方法来缓存图像或防止它们占用我的读写配额吗?您可以使用google images api 我通常做的是在上传时,我存储由图片创建的url。获取服务url(blob_键)。不确定是否更便宜,但在我的开发服务器上,每次调用获
无论如何,有什么推荐的方法来缓存图像或防止它们占用我的读写配额吗?您可以使用google images api 我通常做的是在上传时,我存储由图片创建的url。获取服务url(blob_键)。不确定是否更便宜,但在我的开发服务器上,每次调用获取服务url都会创建一个数据存储写入。我的建议是用于存储图像。它更适合并推荐用于服务静态文件。好的是,现在您可以使用相同的图像api: 注意:您还可以提供存储在中的图像。为此,需要使用blobstoreapi函数生成Blob密钥。您还需要在正在使用的bucket上设置一个默认对象,该对象为您的应用程序提供
完全控制
权限,以便图像服务可以将自己的ACL添加到对象中。有关ACL和权限的信息,请参阅Google云存储的文档
另一个我喜欢的特性是,如果你需要以不同的尺寸提供图像,你不需要存储不同分辨率的图像。您只需将参数添加到由get\u service\u url
返回的url即可。此外,您只需调用一次get\u serving\u url
,将此url存储在某个位置,并在需要为图像提供服务时使用它。此外,您还可以重复使用相同的url,为不同大小的相同图像提供服务
URL修改:
=sXX要调整图像大小,请将=sXX附加到图像URL的末尾,其中XX是0–1600之间的整数,表示图像中的新图像大小
像素。最大尺寸在IMG_服务尺寸_限制中定义。这个
API将图像大小调整为提供的值,并应用指定的
调整图像的最长尺寸并保留原始尺寸
纵横比。例如,如果使用=s32调整1200x1600的大小
图像,生成的图像是24x32。如果该图像为1600x1200,
调整大小后的图像将为32x24像素
=sXX-c要裁剪图像并调整其大小,请将=sXX-c附加到图像URL的末尾,其中XX是0–1600之间的整数,表示新的URL
以像素为单位的图像大小。最大大小在中定义
IMG_服务尺寸_限制。API将图像的大小调整为提供的大小
值,将指定的大小应用于图像的最长维度
以及保持原始纵横比。如果图像是肖像,
API从顶部和底部均匀切片,形成正方形。如果
图像是横向的,API从左到右均匀地切片
做一个正方形。裁剪后,API将图像的大小调整为
指定的大小
布洛斯托很好
只需确保在url处理程序中设置HTTP缓存头。这允许您的文件通过浏览器缓存(在这种情况下,您无需支付任何费用)或App Engine的边缘缓存(您将支付带宽费用,但不支付blobstore访问费用)
不过,在使用边缘缓存时要非常小心。如果设置的过期时间过长,用户将永远看不到更新的版本。通常情况下,解决方法是在更改版本时更改url。写入是否比读取更昂贵?或者您只是想在写操作上进行特殊保存。在生产环境中,get_serving_url没有数据存储写入。@StuartLangley您对缓存图像有什么建议,或者有必要吗?就GAE而言,你通常知道你在说什么,这就是为什么我的另一个应用程序没有那么多消费,它只是一直使用get_serving_url@Stuart你知道get_serving_url是否与创建的缓存url一样好吗?该方法可能没有缓存,并且存在延迟问题。谢天谢地,我的意思是将结果存储到数据存储,这是缓存。实际上,我只是阅读了源代码,它确实进行了rpc调用,这意味着最好只调用一次并重用它。如果要使用get_serving_url为图像提供服务,那么在blobstore上使用google云存储没有任何额外的好处。使用get_serving_url几乎是免费的,因为图像不是由您自己的应用程序提供的。请看这篇博文:这不是免费的——你需要为带宽和少量blob存储付费。@StuartLangley云存储有很多好处:免费托管(至少到年底)、上传文件更灵活、CS更适合更大的文件、,它是一个专用的文件存储引擎,具有许多附加功能,如果您将来需要它们的话。而对于blobstore,如果需要,则必须手动实现它们。从长远来看,CS允许您利用blobstore和更多功能尽一切可能。因此,这似乎是一个更好的选择。另外,如果你注意到谷歌通过为CS启用blobstore api来鼓励它的话。是的,我知道是我写的api;)图像或页面本身的更新版本?因为当用户上传或发布一些东西时,我的图片和页面每隔几分钟就会改变一次。边缘缓存通过URL工作,所以URL指向的任何内容都会被缓存。对您来说,最好的选择可能是设置一个较短的缓存超时。另一个选项是缓存超时时间较长,但随着图像的更改,更改图像的URL。