【问题标题】:Using nginx to serve content directly out of a redis cache使用 nginx 直接从 redis 缓存中提供内容
【发布时间】:2011-06-01 03:52:09
【问题描述】:

我正在使用 nginx 将请求传递给 Node 应用程序。该应用程序基本上充当 html 的远程缓存(检查用户请求的内容是否在 redis 数据库中,如果只是显示,如果没有抓住它并将其存储在 redis 缓存中并提供它。)

我很好奇是否有办法通过让 nginx 直接从 redis 提供内容来绕过访问 Node 应用程序?我一直在玩弄 http_redis 模块,但我无法真正让它工作。

一个简单的例子是:http://mywebsite.com/a,其中 nginx 将在“a”键中提供内容,或者如果该键不存在,则将其传递给节点应用程序。这甚至可能吗?

【问题讨论】:

    标签: caching nginx redis


    【解决方案1】:

    也许有些东西比 Webdis 更难设置,但你可以直接在 nginx 守护进程中使用一些额外的模块,如 redis2-nginx-module。您将不得不重新编译 nginx。

    主页上有一些很好的配置示例。

    例如:

    # GET /get?key=some_key
    location /get {
        set_unescape_uri $key $arg_key;  # this requires ngx_set_misc
        redis2_query get $key;
        redis2_pass foo.com:6379;
    }
    

    当然,通过更多的 nginx 配置,你可以获得另一个 URL 模式。

    请注意,对于此示例,您还必须编译 ngx_set_misc 模块。

    【讨论】:

      【解决方案2】:

      你应该可以通过将 Nginx 设置为 Webdis 的反向代理来获得一些东西。

      您使用 Webdis 的方式是将整个命令放在 URL 中,因此对于 GET 密钥 a 您请求 /GET/a。这意味着如果您想提供的所有内容都可以使用GET 获得,您可以在 Nginx 中执行以下操作:

      location / {
        rewrite ^(.*)$ /GET/$1 break;
        proxy_pass http://127.0.0.1:7379/;
      }
      

      (我在这里写下我的头顶配置,语法可能略有偏差)。

      但是,Webdis 项目还很年轻,所以不知道它的运行效果如何,而且响应是 JSON 文档,带有一些您可能不想返回的多余内容。

      【讨论】:

      • 嗯,我去看看。我对 nginx 不太了解,所以我什至不知道我所问的是否可能。我想对于您的方法,我只需要看看从 Node 或 Webdis 提供它是否会更快。似乎 nginx 能够直接从 memcache 提供服务,并且 http_redis 模块似乎是仿照它的。
      • 如果您也将它与 pub/subs 一起使用,您需要关闭 proxy_buffering 并将 proxy_read_timeout 设置为适当的长值。
      【解决方案3】:

      我知道这是一个旧线程,但仍然可能对某些人有用。我尝试了与直接从 Redis 提供 nginx 服务的方法相同的方法,而无需在 nginx 中使用 HttpRedis2Module 。当我让它工作时我很高兴,因为它有点麻烦,但是当我做一些压力测试时,我担心它会给出非常糟糕的结果。

      实际上,使用 nginx->php->mongodb 提供服务比仅使用 nginx->redis 和模块提供服务要快一些且稳定得多。

      【讨论】:

      • 你在 nginx 中为你的 redis 池设置了 keepalive 吗?上次我测试这个 keepalive 时,slover 比 php -> redis 和更快...
      • 在基准测试中 PHP+MongoDb 比 Redis 更快我并不感到惊讶,因为 Redis 是一个没有多线程的单进程,这意味着无论您有多少 CPU 内核,它都使用一个进程串行处理所有请求有。因此,虽然它非常快,但 PHP+MongoDb 很可能在高并发下更快,因为它们能够通过并行处理许多请求来充分利用所有 CPU 内核。 MongoDb 也非常快。
      猜你喜欢
      • 2013-10-28
      • 2017-05-03
      • 1970-01-01
      • 2020-11-23
      • 2011-02-01
      • 1970-01-01
      • 2014-07-30
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多