Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 使用nginx直接从redis缓存中提供内容_Caching_Nginx_Redis - Fatal编程技术网

Caching 使用nginx直接从redis缓存中提供内容

Caching 使用nginx直接从redis缓存中提供内容,caching,nginx,redis,Caching,Nginx,Redis,我正在使用nginx将请求传递给节点应用程序。该应用程序基本上充当html的远程缓存(检查用户请求的内容是否在redis db中,如果只是显示,如果不是,则抓取并存储在redis缓存中并提供服务) 我很好奇,通过让nginx直接从redis提供内容,是否可以绕过节点应用程序?我一直在玩弄http_redis模块,但我真的无法让它工作 一个简单的例子是:nginx将在“A”键中提供内容,或者如果该键不存在,则将其传递给节点应用程序。这可能吗 通过将Nginx设置为的反向代理,您应该能够获得一些东西

我正在使用nginx将请求传递给节点应用程序。该应用程序基本上充当html的远程缓存(检查用户请求的内容是否在redis db中,如果只是显示,如果不是,则抓取并存储在redis缓存中并提供服务)

我很好奇,通过让nginx直接从redis提供内容,是否可以绕过节点应用程序?我一直在玩弄http_redis模块,但我真的无法让它工作


一个简单的例子是: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的速度非常快。