2017-03-29 93 views
1

我正在使用Gunicorn和Flask(Pythonn 3.6)的一个小型服务。下面的伪代码大致显示了我想要的行为。有很多序列化的foo对象,我希望尽可能多地将这些对象保存在内存中,并在LRU的基础上删除它们。如何在Gunicorn工作人员之间共享缓存?

cache = Cache() 

@app.route('/') 
def foobar(): 
    name = request.args['name'] 
    foo = cache.get(name) 
    if foo is None: 
     foo = load_foo(name) 
     cache.add(foo) 

    return foo.bar() 

我遇到的问题是我不知道如何分享Gunicorn工作人员之间的这个缓存。我正在处理有限的内存,并不想保持重复的对象。某些对象会经常使用,有些可能永远不会使用,所以我认为将它们保存在内存中是非常有意义的。

这只是从另一个应用程序(都运行在同一台服务器上)的请求,我只是想保持这个代码分开。我甚至在第一时间甚至使用Gunicorn来完全错误的方向?

回答

0

我没有看到使用Gunicorn的任何错误,但可能没有必要考虑水平缩放,除非您接近将其投入生产。无论如何,我建议使用单独的服务作为缓存,而不是在Python内存中使用。这样,每个工作人员可以根据需要打开到缓存的连接。 Redis是一个受欢迎的选项,但您可能需要执行一些数据操作来存储数据,例如将数据存储为JSON字符串而不是python对象。 Redis可以通过配置它来充当LRU缓存:https://redis.io/topics/lru-cache

相关问题