Nginx直接访问redis,lua访问redis

这个需要一个模块,这个模块叫 redis2-nginx-module.下载地址是

https://github.com/openresty/redis2-nginx-module/archive/v0.15.tar.gz 

直接去wget就可以

这个需要重新编译nginx,然后把这个模块加上。

下面大概说一下编译Nginx 和加这个模块可能会遇到的问题。

一、安装nginx +redis2-nginx-module

首先如果你电脑上有nginx ,那么你要写 使用nginx -V 查看一下当前的模块,把这些模块全部拷贝在一个位置上。

然后解压你下载的nginx,进入解压后的nginx 目录,然后执行, 

./configure  --prefix=  然后上面拷贝的全加上,然后再加上 一开始说的,redis2-nginx-module模块。

然后执行make。 可能会报错,大部分原因是因为缺少 依赖包,比如 pcre之类的,缺少什么就编译安装什么。

然后 最后执行 nginx -V 可能会找不到Nginx,这样就软连接到bin目录下。

二、将nginx 软连接到bin下

ln -s  <现在的目录>   <链接到的目录>

然后在其他地方 访问一下 nginx -V

如果发现有redis2-ginx-module  就说明成功了。但是如果之前装过nginx ,配置文件要重新加载一下。

三、Nginx重新加载配置文件

nginx -c /usr/local/nginx-1.8.1/conf/nginx.conf    

切记换成自己的目录。我因为目录的问题搞了很久。

四、测试一下

找到nginx.conf,然后去里边的 server里边写一段代码

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

foo.com改为redis地址,如果是本机则改为127.0.0.1.

然后重启 nginx ,命令 nginx -s reload

测试一下,curl  127.0.0.1/get?key=name;

如果redis里设了name,会返回对应的值。就成功了。

这里是github文档:

https://github.com/openresty/redis2-nginx-module

五、配置lua语言进行操作redis

下载安装lua语言, 然后还是重新编译nginx,然后重载配置文件。然后在链接redis的时候可能会找不到文件,一直

no file。这时候,需要在Nginx.conf  里的server外边指一下lua包的位置。

然后    在server里边配置一下

  location = /test {

            default_type 'text/plain';

            content_by_lua 'ngx.say("hello, lua")';
   }
  location /post {
              default_type text/html;
              content_by_lua_file /usr/local/nginx-1.8.1/conf/post.lua;
  }



 location = /set {
      set_unescape_uri $key $arg_key;  # this requires ngx_set_misc
      set_unescape_uri $val $arg_val;  # this requires ngx_set_misc
      redis2_query set $key $val;
      redis2_pass 127.0.0.1:6379;
  }

然后就可以在自己指定的lua里边写代码了。

local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
    ngx.say("failed to connect: ", err)
    return
 else
   -- ngx.say("redis connetc success")
end

--从header拿到token
local receive_headers = ngx.req.get_headers()
for k, v in pairs(receive_headers) do
     if k == "token" then token = v end
   
end
--查看是否存在
        temp1 = 0
        temp1  =  red:exists(token)
        
  
        if  temp1 == 0  then 

                ngx.say("查无此人")
        else
                ngx.say("您的ID为"..red:get(token))
        end

因为最近比较忙,写的比较仓促,如果有问题,欢迎留言,我看到了一定回复。

猜你喜欢

转载自blog.csdn.net/wuye_lh/article/details/106850854
今日推荐