ngx_lua操作Redis和Mysql

功能简介

  • 通过ngx_lua对redis进行数据的插入和取出
  • ngx_lua对mysql的增删改查
  • 浏览器以json格式返回数据
  • 将频繁调用的cjson设置全局,一开始就加载

结果显示

redis数据插入和取出的显示:
在这里插入图片描述

mysql增删改查的显示:
在这里插入图片描述

nginx.conf的配置

 
    #设置全部变量,一开始加载
    init_by_lua_block{
        cjson = require "cjson";
    }
         
    server {
        listen       80;
        server_name  localhost;

        charset UTF-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        location /lua{
            default_type 'text/html';
            content_by_lua 'ngx.say("<h1>HELLO,OpenRestry</h1>")';
        }

        #lua连接redis
        location /luaRedis {
            charset gbk;
            default_type "text/html";
            content_by_lua_block{
                
                --01 引入redis
                local redis=require "resty.redis"
                
                --02 创建redis对象
                local redisObj=redis:new()
                
                --03 设置超时
                redisObj:set_timeout(1000)
                
                --04 连接
                local ok,errr=redisObj:connect("redis所在的IP",6379)
                if not ok then
                	ngx.say("连接失败",err)
                	return
                end
                
                --05 redis存入数据
                local ok,errr=redisObj:set("name","xiaoTang")
                if not ok then
                	ngx.say("数据导入失败",err)
                	return
                end
                
                --06 redis取出数据
                local ans,errr=redisObj:get("name")
                ngx.say(ans)
                
                --07 连接关闭
                redisObj:close()
            }
   
        }
        
        #lua连接mysql
        location /luaMysql {
            charset gbk;
            default_type "text/html";
            content_by_lua_block{
                local mysql = require "resty.mysql"
                --local cjson = require "cjson"
                local db = mysql:new()
                local ok,err = db:connect{
                    host="IP",
                    port=3306,
                    user="root",
                    password="密码",
                    database="nginx_db"
                }
                db:set_timeout(1000)
                
                db:send_query("select * from users")
                local res,err,errcode,sqlstate = db:read_result()
                for i,v in ipairs(res) do
                	ngx.say(v.id..","..v.username..","..v.birthday..","..v.salary)
                end
                
                --换行和加粗
                local html = [[
                  <html>
                  <head></head>
                  <body>
                  <p><b>
                  <br />mysql中以json返回数据<br />
                  </b></p>
                  </body>
                  </html>
                ]]
                ngx.say(html);
                local jsonDate=cjson.encode(res);
                ngx.say(jsonDate);
                
                --数据库的增删改查
                 --换行和加粗
                local html = [[
                  <html>
                  <head></head>
                  <body>
                  <p><b>
                  <br />数据库的增删改查<br />
                  </b></p>
                  </body>
                  </html>
                ]]
                ngx.say(html);
                --mysql的增加
                --local sql="insert into users(id,username,birthday,salary) values(null,'xiaoTang','1996-04-26',66666.6)";
                
                --mysql的删除
                --local sql="delete from users where username='xiaoTang'";
                
                --mysql的修改
                --local sql="update users set username='xiaoTang02' where id=3";
                
                --mysql的查找
                local sql="select * from users where username='xiaoTang02'";
                --数据库执行语句直接用query
                local res,err,errcode,sqlstate = db:query(sql);
                local jsonDate=cjson.encode(res);
                ngx.say(jsonDate);
                db:close()

            }
   
        }

相关API介绍

redis的API

lua-resty-redis提供了访问Redis的详细API,包括创建对接、连接、操作、数据处理等。这些API基本上与Redis的操作一一对应。
(1)redis = require "resty.redis"2)new
	语法: redis,err = redis:new(),创建一个Redis对象。
(3)connect
	语法:ok,err=redis:connect(host,port[,options_table]),设置连接Redis的连接信息。
	ok:连接成功返回 1,连接失败返回nil
	err:返回对应的错误信息
(4)set_timeout
	语法: redis:set_timeout(time) ,设置请求操作Redis的超时时间。
(5)close
	语法: ok,err = redis:close(),关闭当前连接,成功返回1,失败返回nil和错误信息
(6)redis命令对应的方法
	在lua-resty-redis中,所有的Redis命令都有自己的方法,方法名字和命令名字相同,只是全部为小写。

mysql的API

1)引入"resty.mysql"模块
	local mysql = require "resty.mysql"2new
	创建一个MySQL连接对象,遇到错误时,db为nil,err为错误描述信息
	语法: db,err = mysql:new()3)connect
	尝试连接到一个MySQL服务器
	语法:ok,err=db:connect(options),options是一个参数的Lua表结构,里面包含数据库连接的相关信息
    host:服务器主机名或IP地址
    port:服务器监听端口,默认为3306
    user:登录的用户名
    password:登录密码
    database:使用的数据库名
(4)set_timeout
	设置子请求的超时时间(ms),包括connect方法
	语法:db:set_timeout(time)5)close
	关闭当前MySQL连接并返回状态。如果成功,则返回1;如果出现任何错误,则将返回nil和错误描述。
	语法:db:close()6)send_query
	异步向远程MySQL发送一个查询。如果成功则返回成功发送的字节数;如果错误,则返回nil和错误描述
	语法:bytes,err=db:send_query(sql)7)read_result
	从MySQL服务器返回结果中读取一行数据。res返回一个描述OK包或结果集包的Lua表,语法:
	res, err, errcode, sqlstate = db:read_result() 
	res, err, errcode, sqlstate = db:read_result(rows) :rows指定返回结果集的最大值,默认为4
	如果是查询,则返回一个容纳多行的数组。每行是一个数据列的key-value对,如

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐维康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值