Caching 使用nginx直接从redis缓存中提供内容
我正在使用nginx将请求传递给节点应用程序。该应用程序基本上充当html的远程缓存(检查用户请求的内容是否在redis db中,如果只是显示,如果不是,则抓取并存储在redis缓存中并提供服务) 我很好奇,通过让nginx直接从redis提供内容,是否可以绕过节点应用程序?我一直在玩弄http_redis模块,但我真的无法让它工作Caching 使用nginx直接从redis缓存中提供内容,caching,nginx,redis,Caching,Nginx,Redis,我正在使用nginx将请求传递给节点应用程序。该应用程序基本上充当html的远程缓存(检查用户请求的内容是否在redis db中,如果只是显示,如果不是,则抓取并存储在redis缓存中并提供服务) 我很好奇,通过让nginx直接从redis提供内容,是否可以绕过节点应用程序?我一直在玩弄http_redis模块,但我真的无法让它工作 一个简单的例子是:nginx将在“A”键中提供内容,或者如果该键不存在,则将其传递给节点应用程序。这可能吗 通过将Nginx设置为的反向代理,您应该能够获得一些东西
一个简单的例子是:nginx将在“A”键中提供内容,或者如果该键不存在,则将其传递给节点应用程序。这可能吗 通过将Nginx设置为的反向代理,您应该能够获得一些东西 使用Webdis的方法是将整个命令放在URL中,以便
GET
键a
请求/GET/a
。这意味着,如果您想使用GET
提供所有服务,您可以在Nginx中执行类似操作:
location / {
rewrite ^(.*)$ /GET/$1 break;
proxy_pass http://127.0.0.1:7379/;
}
(我在这里从头开始写配置,语法可能有点错误)
然而,Webdis项目还很年轻,因此不知道它的工作情况如何,响应是JSON文档,带有一些额外的绒毛,您可能不想返回这些绒毛。可能比Webdis更难设置,但您可以直接在nginx守护进程中使用一些额外的模块,如。您必须重新编译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模式
请注意,对于这个示例,您也必须编译模块。我知道这是一个旧线程,但对于一些人来说,这可能是有用的。我尝试了与直接从Redis使用nginx服务相同的方法,而没有在nginx中使用HttpRedis2Module。当我让它工作时,我很高兴,因为这是一个麻烦,但当我做一些压力测试时,我担心它会给出非常糟糕的结果
使用
nginx->php->mongodb
提供服务实际上比在模块中使用nginx->redis
更快、更稳定。hmm,我来看看。我不太了解nginx,所以我甚至不知道我所问的是否可能。我想对于您的方法,我只需要看看从Node或Webdis提供服务是否会更快。nginx似乎可以直接从memcache服务器,http_redis模块似乎就是仿效它的。如果你也在pub/subs中使用它,你会希望关闭代理缓冲,并将代理读取超时设置为适当的长值。你在nginx中为你的redis池设置了keepalive吗?上一次我测试这个keepalive时,它与php->redis的速度有很大区别……我并不奇怪php+MongoDb在基准测试中比redis快,因为redis是一个没有多线程的单进程,这意味着它可以用一个进程串行处理所有请求,而不管您有多少CPU核。因此,虽然它非常快,但PHP+MongoDb很有可能在高并发性下更快,因为它们能够通过并行处理多个请求来充分利用所有CPU核。而且MongoDb的速度非常快。