功能简介

  • 通过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连接redislocation /luaRedis {charset gbk;default_type "text/html";content_by_lua_block{--01 引入redislocal 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 thenngx.say("连接失败",err)returnend--05 redis存入数据local ok,errr=redisObj:set("name","xiaoTang")if not ok thenngx.say("数据导入失败",err)returnend--06 redis取出数据local ans,errr=redisObj:get("name")ngx.say(ans)--07 连接关闭redisObj:close()}}#lua连接mysqllocation /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) dongx.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'";--数据库执行语句直接用querylocal 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,连接失败返回nilerr:返回对应的错误信息
(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"
(2)new创建一个MySQL连接对象,遇到错误时,db为nil,err为错误描述信息语法: db,err = mysql:new()
(3)connect尝试连接到一个MySQL服务器语法:ok,err=db:connect(options),options是一个参数的Lua表结构,里面包含数据库连接的相关信息host:服务器主机名或IP地址port:服务器监听端口,默认为3306user:登录的用户名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对,如

ngx_lua操作Redis和Mysql相关推荐

  1. redis和mysql的衔接操作(redis加速mysql)

    redis和mysql的衔接 1. 配置架构 1.1 配置mysql和redis连接 1.2 配置mysql数据库 1.3 安装redis数据库 1.4 测试 2. redis和mysql的实时同步 ...

  2. 搭建redis给mysql做缓存

    安装redis的前提是lnmp或者lamp的环境已经搭建完成. 安装redis 1.安装redis(或可以选择yum安装) 1 2 3 4 5 6 7 8 9 10 11 12 [root@redis ...

  3. 面试官: Redis 与 MySQL 双写一致性如何保证?

    前言 四月份的时候,有位好朋友去美团面试.他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题. ...

  4. 美团二面:Redis与MySQL双写一致性如何保证?

    前言 四月份的时候,有位好朋友去美团面试.他说,被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题. ...

  5. 使用redis和mysql的开源项目_干货!带你了解为什么那么多开源项目都是用Redis!...

    很多开源项目中都使用了redis,这些项目为什么使用redis?使用redis有什么好处?怎么使用redis?带着这些疑问,我们来了解一下redis. 一.什么是Redis Redis是一个免费开源用 ...

  6. 利用gearman实现redis缓存mysql

    环境: centos6.5 mysql5.6 gearman简介: Gearman是一个支持分布式的任务分发框架.设计简洁,获得了非常广泛的支持.一个典型的Gearman应用包括以下这些部分: Gea ...

  7. 使用HAProxy、PHP、Redis和MySQL支撑10亿请求每周架构细节

    2019独角兽企业重金招聘Python工程师标准>>> [编者按]在公司的发展中,保证服务器的可扩展性对于扩大企业的市场需要具有重要作用,因此,这对架构师提出了一定的要求.Octiv ...

  8. mongodb,redis,mysql简要对比

    mongodb,redis,mysql 简要对比 本篇内容大部分不是原创,转载的会贴有链接. 准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块. 当下主流的要数No ...

  9. mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具

    学习编程时,总会遇到各种各样的数据库,比如Redis.MySQL或MongoDB.这些数据库都有一个共同特点:全是基于命令行操作,没有可视化管理界面. 比如,开启数据库服务的命令是这样的. 首先,以管 ...

最新文章

  1. flex for java_Java和Flex整合报错(四)
  2. Shader山下(二十一)多重变体(Multiple Variants)
  3. Python应用实战-在Python中进行数据处理操作的几种方法
  4. python string模块template_Python - 定制pattern的string模板(template) 详解
  5. Win11开始菜单没反应怎么办 Win11开始菜单点了没反应解决方法
  6. 关系数据库的基本概念和MySQL说明
  7. SAP License:OAYZ中的使用年限无法更改
  8. Mate 30 不预装任何谷歌应用;阿里巴巴发布新“六脉神剑”;VS Code 1.38 发布 | 极客头条...
  9. php简单多态,PHP 对象 多态性 简单图形计算器
  10. PHP中的unset的使用问题
  11. Http协议简易分析
  12. 你认识什么是前端吗?你是合格的前端吗?
  13. wms仓库管理系统具有四大功能
  14. UML图的各类符号解析
  15. 怎样让计算机加快速度,六大招教你把旧电脑恢复如新,速度提升N倍!-怎么让电脑速度变快...
  16. 《软件测试》 --- 读书笔记
  17. 华硕ASUS FZ63VD fn快捷键失灵
  18. PHP7 Windows10环境搭建
  19. 高数笔记基础篇(更完)
  20. linux命令的含义,Linux常见命令及含义

热门文章

  1. java中volatile的含义_java中volatile关键字的含义
  2. mysql group_concat去重_Mysql下GROUP_CONCAT使用
  3. window10 vs2013 SIFTGPU
  4. 实践作业4:Web测试实践(小组作业)记录1
  5. 51Nod 1283 最小周长
  6. PHP 修改memory_limit方法
  7. 【☆】javascript数据类型拾遗
  8. (译)Objective-C的动态特性
  9. Sql Server查询语句的一些小技巧
  10. Android 高效的`InjectView – ButterKnife`