Nginx-redis 模块可以返回 Redis 值的字符串长度

我正在使用 redis2-nginx-module 将以字符串形式存储在 redis 中的 html 内容提供服务。以下是从 redis 获取密钥值的nginx配置代码。

  redis2_query get $fullkey;
  redis2_pass     localhost:6379;
  #default_type text/html;

当 URL 被命中时,将呈现以下不需要的响应,同时会显示该密钥的值。

$14

如何删除这个不需要的输出? 如果传递的密钥在 redis 中不存在,怎样检查这个条件并显示一些默认页面?

点赞
用户116546
用户116546

这个问题在ServerFault有一个类似的提问

只使用redis2模块没有办法,因为它总是返回原始的Redis响应

如果你只需要 GETSET 命令,你可以尝试使用HttpRedisModule (redis_pass)。如果你需要更高级的功能,例如hashes,你可能需要用Lua来过滤Redis的原始响应,类似这样:

content_by_lua '
    local res = ngx.location.capture("/redis",
        { args = { key = ngx.var.fullkey } }
    )
    local body = res.body
    local s, e = string.find(body, "\r\n", 1, true)
    ngx.print(string.sub(body, e + 1))
';

(抱歉,代码未经测试,手头没有OpenResty实例。)

2016-05-13 14:42:01