美文网首页我爱编程
OpenResty安装和redis的访问

OpenResty安装和redis的访问

作者: 再无人像你 | 来源:发表于2018-05-21 18:22 被阅读63次

    OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台。最重要的一点是它将lua/luajit打包了进来,使得我们可以使用lua脚本来进行web的开发。有了lua,我们可以借助于nginx的异步非阻塞的功能,达到使用 lua 异步并发访问后端的 MySQL, PostgreSQL, Memcached, Redis等等服务。特别是特有的 ngx.location.capture_multi 功能让人印象深刻,其可以达到极大的减少浏览器的http连接数量,并且可以异步并发的访问后台 Java/PHP/Python 等等接口。OpenResty 架构的web可以轻松超越Node.js的性能,并且对后端语言没有限制,你可以使用Java/PHP/Python等等各种语言。OpenResty(nginx+lua)可以替代node.js的前端渲染的功能。

    安装

    1、    wget https://openresty.org/download/openresty-1.13.6.1.tar.gz

    2、    yum -y install readline-devel pcre-devel openssl-devel gcc postgresql-devel

    3、   ./configure --prefix=/root/software/openresty \ --with-luajit \

                --without-http_redis2_module \

                --with-http_iconv_module \

                --with-http_postgres_module

                make && make install

    启动

    ~/software/openresty/nginx/sbin/nginx -p ~/software/openresty/nginx/ -c ~/software/openresty/nginx/conf/nginx.conf

    查看

    访问本地80端口会看到如下信息

    运行lua脚本

    修改nginx的配置文件(openresty的nginx文件夹里的conf)

    nginx运行lua分为content_by_lua 和content_by_lua_file,前面是直接配置文件里面写lua脚本,后者是指定一个lua文件,加上lua_code_cache_off每次修改lua文件的时候不用重启nginx,方便调试。

    这里的/lua 会映射到nginx文件下的lua文件夹下的hello.lua 文件

    浏览器访问/lua这个路径的时候,将会打印 hello ngx_lua!!!

    下面是基于redis连接池实现的连接redis,通过url的operation参数和key参数进行get操作或者set操作

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

    local request_method = ngx.var.request_method

    local args = nil

    if "GET" == request_method then

        args = ngx.req.get_uri_args()

    elseif "POST" == request_method then

        ngx.req.read_body()

        args = ngx.req.get_post_args()

    end

    local operation = args["operation"]

    local redisKey = args["key"]

    if operation == nil then

      operation ="set"

    end

    if redisKey == nil then

    redisKey="dog"

    end

    ngx.say("oprations=",operation)

    ngx.say("key=",redisKey)

    local redis = require "resty.redis"

    local red = redis:new()

    red:set_timeout(1000) -- 1 sec

    local ok, err = red:connect("127.0.0.1", 6379)

    if not ok then

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

        return

    end

    local count

    count, err = red:get_reused_times()

    if 0 == count then

        ok, err = red:auth("123456")

        if not ok then

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

            return

        end

    elseif err then

        ngx.say("failed to get reused times: ", err)

        return

    end

    ok, err = red:set(redisKey, "this is a default value")

    if not ok then

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

        return

    end

    ngx.say("set result: ", ok)

    ok,err=red:get(redisKey)

    if not ok then

      ngx.say("faild to get ", err)

    end

    ngx.say("get reuslt: ",ok)

    -- 连接池大小是100个,并且设置最大的空闲时间是 10 秒

    local ok, err = red:set_keepalive(10000, 100)

    if not ok then

        ngx.say("failed to set keepalive: ", err)

        return

    end

    这里解释一下 tcpsock:getreusedtimes() 方法,如果当前连接不是从内建连接池中获取的,该方法总是返回 0 ,也就是说,该连接还没有被使用过。如果连接来自连接池,那么返回值永远都是非零。所以这个方法可以用来确认当前连接是否来自池子。

    对于 Redis 授权,实际上只需要建立连接后,首次认证一下,后面只需直接使用即可。换句话说,从连接池中获取的连接都是经过授权认证的,只有新创建的连接才需要进行授权认证。所以大家就看到了 count, err = red:get_reused_times() 这段代码,并有了下面 if 0 == count then 的判断逻辑。

    参考:http://wiki.jikexueyuan.com/project/openresty/redis/auth_connect.html

               http://moguhu.com/article/detail?articleId=54

               https://www.cnblogs.com/digdeep/p/4859575.html

    相关文章

      网友评论

        本文标题:OpenResty安装和redis的访问

        本文链接:https://www.haomeiwen.com/subject/xlsqjftx.html