【问题标题】:Does python with wsgi (uwsgi) under nginx have some small default cache?nginx下带有wsgi(uwsgi)的python是否有一些小的默认缓存?
【发布时间】:2019-05-06 14:09:42
【问题描述】:

在我的小型网站中,我觉得需要让一些数据广泛可用,以避免每次请求都与数据库交换。例如。这可能是每个页面底部显示的当前用户列表或上次更新排名的时间。

这些东西在运行在 nginx + uwsgi (this docker image) 上的 Python (Flask) 中工作。

我想知道,我是否有一些小型缓存或共享内存来“开箱即用”地保存此类信息,或者我需要明确设置一些专用缓存?或者也许像这样的东西是由 nginx 提供的?

另外,我仍然可以使用数据库,因为我认为它有自己的缓存

对不起,如果问题似乎很幼稚/愚蠢-因为我来自 java 世界(在我们使用一个胖 Java 应用程序实例服务所有请求时,情况有点不同)-并且难以掌握 wsgi/uwsgi 的功能提供。提前致谢!

【问题讨论】:

    标签: python nginx flask uwsgi


    【解决方案1】:

    【讨论】:

    • 感谢这个现成的选项列表。我是否正确理解烧瓶缓存需要(也许除了 SimpleCache)设置缓存应用程序(redis 或 memcached)?
    • 这是一种方法,是的@RodionGorkovenko,如果你想使用它们,你需要设置 redis 或 memcached。
    • 谢谢 :) 这就是重点。似乎存储少量值 redis 和 memcached 会有点过头了,虽然我不能清楚地理解在 uwsgi 设置中使用 SimpleCache 是否正确 :)
    • 没有 simplecache 仅用于开发。如果你认为 redis/memcache 太过分了,那么 nginx 缓存可能适合你——你已经在使用 nginx
    【解决方案2】:

    您是否查看过 Flask 文档中的 caching section

    字面意思是:

    Flask 本身并不为您提供缓存,但 Werkzeug(它所基于的库之一)具有一些非常基本的缓存支持

    您创建一个缓存对象并保留它,类似于创建 Flask 对象的方式。如果您使用的是开发服务器,您可以创建一个 SimpleCache 对象,该对象是一个简单的缓存,它将项目存储在 Python 解释器的内存中:

    from werkzeug.contrib.cache import SimpleCache
    cache = SimpleCache()
    

    -- 更新--

    或者您可以解决前端将数据存储在网络浏览器本地存储中的问题。

    如果您调用数据库的本地存储中没有任何内容,则您使用本地存储中的信息而不是进行数据库调用。

    希望对你有帮助。

    【讨论】:

    • 谢谢。我想我已经看到了,但我不确定我是否理解它在 uwsgi 设置中的行为。文档说 SimpleCache 用于单进程并且“可能不是 100% 线程安全的”......如果 uwsgi 在 2 个进程中运行并且两者都会创建缓存的专用副本,然后用于 100 个请求 - 这没关系。如果他们将使用单个实例 - 或者如果它是为每个请求创建的 - 可能不是我应该使用的......
    • 你尝试过本地存储吗?@RodionGorkovenko
    • 本地存储恐怕没多大用处。看,例如我在页面模板中添加了一些计数器,例如“5 个用户在线,今天解决了 30 个问题”。这些数据将显示在每个页面上,但我不想在每次加载时重新计算它们,并且它们对于所有用户(以及未登录浏览的人)都是相同的。可从所有请求/进程访问的缓存似乎是不错的选择...
    猜你喜欢
    • 2015-08-21
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2015-09-25
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多