Flask-Caching 将 UWSGI 缓存与 NGINX 一起使用

Ewr*_*wro 7 python nginx uwsgi flask-cache flask-caching

UWSGI 通过 UNIX 套接字连接到 Flask 应用程序:

NGINX(监听端口 80)<-> UWSGI(每个 UNIX-SOCKER 的列表)<-> FLASK-APP

我已经初始化了一个 uwsgi 缓存来处理全局数据。我想使用 python 包 Flask-caching 来处理缓存。

我正在尝试使用正确的缓存地址初始化缓存实例。似乎有什么不对劲。我认为 app.run() 的参数与 uwsgi 无关。

如果我设置缓存条目,它总是返回 None:

app.route("/")
def test():
    cache.set("test", "OK", timeout=0)
    a = cache.get("test")
    return a
Run Code Online (Sandbox Code Playgroud)

主要.py

from flask import Flask
from flask_caching import Cache

app = Flask(__name__)
# Check Configuring Flask-Caching section for more details
cache = Cache(app, config={'CACHE_TYPE': 'uwsgi', 'CACHE_UWSGI_NAME':'mycache@localhost'})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
Run Code Online (Sandbox Code Playgroud)

uwsgi.ini

[uwsgi]
module = main
callable = app
cache2 = name=mycache,items=100
Run Code Online (Sandbox Code Playgroud)

nginx.conf

server {
    listen 80;
    location / {
        try_files $uri @app;
    }
    location @app {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
    location /static {
        alias /app/testapp/static;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用https://github.com/tiangolo/uwsgi-nginx-flask-docker的 docker 构建。该应用程序正在运行,期待缓存。

vin*_*zee 0

请注意为 NGINX 使用生成多个进程。每个进程都处理自己的缓存。如果没有附加层,就不可能从不同的 nginx 进程访问缓存。


这个答案是由OP ewro在CC BY-SA 4.0下发布的,作为对问题Flask-Caching use UWSGI cache with NGINX的编辑。