Heroku实例是否持久存在?(或者,我可以使用dict/array作为缓存吗?)

KGo*_*KGo 2 python heroku instance newrelic

所以我的朋友告诉我,Heroku上的实例是持久性的(我不确定词汇是否正确,但他暗示所有用户共享相同的实例).

因此,如果我有app.py,并且实例运行它,那么所有用户都共享该实例.这意味着我们可以使用dict作为临时缓存来存储小东西,以缩短响应时间.

因此,举例来说,如果我的服务API,我也许可以这样定义缓存这个,然后使用它.

那是真的吗?我试着查看,但找不到任何东西.

我在1 dyno上将链接的API部署到heroku,并且每秒只有几个请求,服务它需要100多秒.所以我的理解是缓存不起作用.(根据新的遗物,这里可能有用的是大多数时间是由于请求排队.)

Sim*_*tti 10

Heroku Devcenter有几篇关于Heroku架构的文章.

进程不共享内存.此外,您的代码被编译成一个slug并进行优化,以便分发给dyno管理器.简单来说,这意味着您甚至不知道哪台机器将执行您的代码.从理论上讲,5个用户点击您的应用程序可能会被路由到5个不同的计算机和进程.

最后但同样重要的是,请记住,如果您的应用只运行一个网络动态,那么该网络动态将会睡眠.您必须拥有多个网络动态,以防止网络动态故障.当dyno进入睡眠模式时,内存被释放,您将丢失内存中的所有数据.

这意味着您的方法不起作用.

一般来说,在Heroku中你应该使用外部存储.例如,您可以使用Memcached加载项并将缓存信息存储在Memcached中.

另请注意,您不应将文件系统用作缓存.不仅因为它比Memcached慢,还因为Cedar堆栈文件系统应该被认为是短暂的.