2017-03-29 133 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

相關問題