Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图像缓存选项_Python_Google App Engine_Caching_Distributed Caching_Image Caching - Fatal编程技术网

Python 图像缓存选项

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_键)。不确定是否更便宜,但在我的开发服务器上,每次调用获

我正在运行一个用python和jinja2编写的google应用程序引擎网站。我已经让memcached处理数据库中的大部分内容,我不清楚如何提高blobstore提供的图像的效率。我认为它在GAE上与任何其他框架都不会有太大的不同,但我想提到它以防万一


无论如何,有什么推荐的方法来缓存图像或防止它们占用我的读写配额吗?

您可以使用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。