nginx+Lua+redis 单机模式和集群模式 lua连接redis

1.安装lua

1.1安装LuaJIT

[root@lab233 testzpynginx]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz

[root@lab233 testzpynginx]# tar -zxvf LuaJIT-2.0.5.tar.gz

[root@lab233 testzpynginx]# cd LuaJIT-2.0.5

[root@lab233 LuaJIT-2.0.5]# make PREFIX=/usr/local/luajit

[root@lab233 LuaJIT-2.0.5]# make install PREFIX=/usr/local/luajit

1.2配置LuaJIT环境变量

[root@lab233 LuaJIT-2.0.5]# vim /etc/profile

export LUAJIT_LIB=/usr/local/luajit/lib

export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

1.3 lua安装测试

2.ngx_devel_kit和lua-nginx-module

ngx_devel_kit简称NDK,提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。
lua-nginx-module是nginx的lua模块

下载ngx_devel_kit(NDK)模块 

wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz

tar -xzvf v0.2.19.tar.gz

lua-nginx-module 模块

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz

tar -xzvf v0.10.2.tar.gz

3.查看已安装好的nginx

nginx -V可查看已经编译的配置(可在nginx -V得到的配置下重新安装,下面还是采用的默认配置)

[root@lab233 testzpynginx]# cd nginx-1.6.2

[root@lab233 nginx-1.6.2]# /home/sms/zhupy/testzpynginx/nginx-1.6.2/sbin/nginx -V

把原来的参数配置保留

进入nginx目录,安装扩展 加上 lua-nginx-module ,ngx_devel_kit

./configure --prefix=/home/sms/zhupy/testzpynginx/nginx-1.6.2 --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/sms/zhupy/pcre-8.35 --add-module=/home/sms/zhupy/testzpynginx/ngx_devel_kit-0.2.19 --add-module=/home/sms/zhupy/testzpynginx/lua-nginx-module-0.10.2

重新编译安装  执行命令

[root@lab233 nginx-1.6.2]# make

[root@lab233 nginx-1.6.2]# make install

4. nginx引入lua调试

在nginx.conf中加入

 server {

       listen       5801;

       server_name  localhost;

 location /hello_lua {

   default_type 'text/plain';

   content_by_lua 'ngx.say("hello, lua")';

}

 }

重启nginx 访问

代表配置成功

5.实现lua连接redis 集群

下载lua-redis-cluster(连接redis-cluster集群)

下载地址https://github.com/onlonely/lua-redis-cluster

然后解压

(这个lua-redis-cluster连接的时候没有密码的连接,故需要修改源码

源码已经修改 可以直接用修改后的这个包 集群jq.lua脚本也在里面

下载地址 https://download.csdn.net/download/qq_39477018/13611698

Nginx配置

location /h5html {

            default_type 'text/plain';

            #lua_code_cache off;

            content_by_lua_file '/home/sms/zhupy/nginx-1.6.2/conf/lua/jq.lua'; #jq.lua脚本的存放地址

}

编写连接redis集群jq.lua脚本

--引入redis-cluster扩展包

package.path ="/home/sms/zhupy/lua-redis-cluster-master/?.lua;;" --扩展包的路径按自己的路径进行修改

ngx.header.content_type="text/plain";

-- 构建redis集群

local function redis_cluster_init ()

    local redis_cluster = require "resty.redis_cluster"

    local cluster_id = "mymaster"

    local startup_nodes = {

        {"192.168.150.131",6000},--集群 主机

        {"192.168.150.132",6000}--集群 从机

    }

    local opt = {

       timeout = 1000,--执行超时时间

       keepalive_size = 50,--长连接数量

        keepalive_duration = 60000, --长连接保持时间

auth="aaa", --设置密码

    }

    rc = redis_cluster:new(cluster_id, startup_nodes, opt)

    return rc

end

local redis = redis_cluster_init();





--字符串按指定符号分割的方法

function string.split(input, delimiter)

    input = tostring(input)

    delimiter = tostring(delimiter)

    if (delimiter=='') then return false end

    local pos,arr = 0, {}

    -- for each divider found

    for st,sp in function() return string.find(input, delimiter, pos, true) end do

        table.insert(arr, string.sub(input, pos, st - 1))

        pos = sp + 1

    end

    table.insert(arr, string.sub(input, pos))

    return arr

end



--得到请求地址的url 并分割

local res = string.split(ngx.var.uri, "/")

--ngx.say(res)

--ngx.say("====res1",res[1])

--ngx.say("====res2",res[2])

--ngx.say("===res3",res[3])

--ngx.say("===res3",res[4])



local key=res[3];--得到appShortName

local field=res[4];-- 得到主键id

local url,err=redis:hget(key,field)--获取hash格式的值

if not url then  

   url=""

   end

if url == ngx.null then  

    url = "";

end  

--获取到redis中的文件地址后直接进行跳转

return ngx.redirect(url)

重启nginx   访问重定向跳转

6.实现lua连接redis单机

下载lua-redis-cluster(连接单机redis

下载地址 https://github.com/openresty/lua-resty-redis

然后解压

编辑nginx.conf脚本 增加

location /zpy {

            default_type 'text/html';

            #lua_code_cache off;

            content_by_lua_file  /home/sms/zhupy/nginx-1.6.2/conf/lua/zpy.lua; #lua文件的地址

}

编写zpy.lua 脚本

package.path = "/home/sms/zhupy/lua-resty-redis-master/lib/?.lua;;"; --引入 下载的单机lua-resty-redis-master 的包

local function close_redis(red)  

    if not red then  

        return  

    end  

  

    local pool_max_idle_time = 10000 --毫秒  

    local pool_size = 100 --连接池大小  

    local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)  

    if not ok then  

        ngx.say("set keepalive error : ", err)  

    end  

end    

  

local redis = require("resty.redis")  

local red = redis:new()  

 

red:set_timeout(1000)  



local ip = "127.0.0.1"  

local port = 6370  

local ok, err = red:connect(ip, port)  

if not ok then  

    ngx.say("connect to redis error : ", err)  

    return close_redis(red)  

end



local res, err = red:auth("zpy")

if not res then

ngx.say("failed to authenticate: ", err)

return

end



ok, err = red:set("msg", "hello world")  

if not ok then  

    ngx.say("set msg error : ", err)  

    return close_redis(red)  

end  

 

local resp, err = red:get("zpy")  

if not resp then  

    ngx.say("get msg error : ", err)  

    return close_redis(red)  

end  



if resp == ngx.null then  

    resp = ''  

end  

ngx.say("msg : ", resp)  

  

close_redis(red)  

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值