java项目 畅购商城 网站首页高可用nginx+lua

第5章 网站首页高可用nginx+lua
学习目标
了解Lua语言的基本语法
使用nginx+Lua+redis实现广告缓存
掌握nginx限流的基本使用方法
1 Lua介绍
1.1 lua是什么
Lua 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

简单来说:

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

lua 语言具有以下特性

支持面向过程(procedure-oriented)编程和函数式编程(functional programming);
自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;
语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。
应用场景

游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
安全系统,如入侵检测系统
redis中嵌套调用实现类似事务的功能
web容器中应用处理一些过滤 缓存等等的逻辑,例如nginx。
1.2 lua的安装
有linux版本的安装也有mac版本的安装。。我们采用linux版本的安装,首先我们准备一个linux虚拟机。

安装步骤,在linux系统中执行下面的命令。

yum install -y gcc

yum install libtermcap-devel ncurses-devel libevent-devel readline-devel

curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz

tar -zxf lua-5.3.5.tar.gz

cd lua-5.3.5

make linux test

make install
1.3 快速入门
创建hello.lua文件,内容为

print(“hello”);
保存。执行命令

lua helloworld.lua
输出为:

Hello
1.4 LUA的基本语法
lua有交互式编程和脚本式编程。
交互式编程就是直接输入语法,就能执行。
脚本式编程需要编写脚本文件,然后再执行。
一般采用脚本式编程。(例如:编写一个hello.lua的文件,输入文件内容,并执行lua hell.lua即可)

1.4.1 注释
单行注释:两个减号是单行注释:


多行注释:

–[[
多行注释
多行注释
–]]
1.4.2 关键字
关键字就好比java中的 break if else等等一样的效果。lua的关键字如下:

and break do else
elseif end false for
function if in local
nil not or repeat
return then true until
while
1.4.3 定义变量
全局变量,默认的情况下,定义一个变量都是全局变量,

如果要用局部变量 需要声明为local.例如:

– 全局变量赋值
a=1
– 局部变量赋值
local b=2
如果变量没有初始化:则 它的值为nil 这和java中的null不同。

1.4.4 Lua中的数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

数据类型 描述
nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean 包含两个值:false和true。
number 表示双精度类型的实浮点数
string 字符串由一对双引号或单引号来表示
function 由 C 或 Lua 编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
1.4.5 流程控制
如下:类似于if else

–[ 0 为 true ]
if(0) then
print(“0 为 true”)
else
print(“0 不为true”)
end
1.4.6 函数
lua中也可以定义函数,类似于java中的方法。例如:

–[[ 函数返回两个值的最大值 --]]
function max(num1, num2)

if (num1 > num2) then
result = num1;
else
result = num2;
end

return result;
end
– 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))
执行之后的结果:

两值比较最大值为 10
两值比较最大值为 6
1.4.7 require 函数
require 用于 引入其他的模块,类似于java中的类要引用别的类的效果。

用法:

require “<模块名>”

2.nginx+lua+redis实现广告缓存
2.1 需求分析
需要在页面上显示广告的信息。
在这里插入图片描述

2.2 OpenResty
2.2.1 OpenResty介绍
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。

OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 乃至1000K以上并发连接响应的超高性能 Web 应用系统。

360,UPYUN,阿里云,新浪,腾讯网,去哪儿网,酷狗音乐等都是 OpenResty 的深度用户。

OpenResty 简单理解,就相当于封装了nginx,并且集成了LUA脚本,开发人员只需要简单的其提供了模块就可以实现相关的逻辑,而不再像之前,还需要在nginx中自己编写lua的脚本,再进行调用了。

2.2.2 OpenResty安装
linux安装openresty:

1.添加仓库执行命令

yum install yum-utils

yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2.执行安装

yum install openresty
3.安装成功后 会在默认的目录如下:

/usr/local/openresty
2.2.3 安装nginx
默认已经安装好了nginx,在目录:/usr/local/openresty/nginx 下。

修改/usr/local/openresty/nginx/conf/nginx.conf ,将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。

#user nobody; 配置文件第一行原来为这样, 现改为下面的配置
user root root;
测试访问 http://192.168.200.128

1559060439203

2.3 实现思路
2.3.1 表结构分析
tb_ad (广告表)

字段名称 字段含义 字段类型 字段长度 备注
id ID INT
name 广告名称 VARCHAR
position 广告位置 VARCHAR 系统定义
start_time 开始时间 DATETIME
end_time 到期时间 DATETIME
status 状态 CHAR 0:无效 1:有效
image 图片地址 VARCHAR
url URL VARCHAR
remarks 备注 VARCHAR
web_index_lb 首页轮播图
web_index_amusing 有趣区
web_index_ea_lb 家用电器楼层轮播图
web_index_ea 家用电器楼层广告
web_index_mobile_lb 手机通讯楼层轮播图
web_index_mobile 手机通讯楼层广告
2.3.2 缓存预热与二级缓存查询
步骤一:编写lua脚本实现缓存预热(将mysql里的数据查询出来存入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值