这个需要一个模块,这个模块叫 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
因为最近比较忙,写的比较仓促,如果有问题,欢迎留言,我看到了一定回复。