lua在项目中的实际应用
Posted 家园叮咚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua在项目中的实际应用相关的知识,希望对你有一定的参考价值。
1 设计分析
1.1 lua设计分析
设计图:
设计图详解:
1 普通模式,用户获得redis数据需要经过nginx,php-fpm,php框架,再到redis
2 直接模式,对于部分高并发请求, 为了提高吞吐率, 有必要砍掉一些环节和应用来实现快速响应,如上图,这里我们将普通模式中的php-fpm和php框架砍掉了。nginx直接从redis获取数据
1.2 redis异构设计分析
2 nginx+lua部署
2.1 LuaJIT 安装
为什么是LuaJIT而不是lua
1. LuaJIT和Lua的一个区别是,LuaJIT的运行速度比标准Lua快数十倍,可以说是一个lua的高效率版本。
2. LuaJIT被设计成全兼容标准Lua 5.1, 因此LuaJIT代码的语法和标准Lua的语法没多大区别。
2.1.1 安装LuaJIT
2.1.2 配置LuaJIT环境变量
2.1.3 lua语言helloword
vim HelloWorld.lua
输入代码并保存:
print("Hello World!")
执行代码进行验证:
[root@localhost lua-5.3.0]# lua HelloWorld.lua
Hello World!
2.2 ngx_devel_kit和lua-nginx-module
ngx_devel_kit简称NDK,提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。
lua-nginx-module是nginx的lua模块
2.3 nginx安装编译
echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost nginx-1.19.1]# ldconfig
[root@localhost nginx-1.19.1]# nginx -V
可能报错:
解决办法:
3 测试Lua
[root@localhost nginx]# vim /etc/nginx/nginx.conf
在http中添加如下文件
[root@localhost nginx]# vim /etc/nginx/nginx.conf
并将
#user nobody;
前面的#去掉,设置nginx用户为nobody,
大家也可以添加自己的nginx用户。
这时,我们重启nginx
[root@localhost nginx-1.19.1]# /usr/sbin/nginx -s reload
发送测试请求
[root@localhost nginx-1.19.1]# curl 127.0.0.1/lua
hello,world
2.4 lua操作redis
vim /etc/nginx/nginx.conf
上面的代码content_by_lua_fifile /etc/nginx/lua/lua_redis.lua; 是将要执行的lua操作的redis代码封装
在/etc/nginx/lua/lua_redis.lua中
那么,现在我们要去编辑lua_redis.lua这个文件
[root@localhost nginx]# mkdir -p /etc/nginx/lua
[root@localhost nginx]# vim /etc/nginx/lua/lua_redis.lua
输入如下内容:
然后,重启nginx
/usr/sbin/nginx -s reload
我们测试一下:
[root@localhost ~]# curl 127.0.0.1/lua_redis
msg : hello world
可见,成功从redis里面读取数据并输出。
我们再查看redis里面的数据,发现成功插入了msg:hello world这条数据。
4 通过rabbitmq_worker插入redis异构数据,并用nginx+lua获取
将库存数据异构到redis中:
新建文件代码:
/etc/nginx/lua/lua_redis_sku_num.lua
上面新建的文件不会自动执行,我们要继续修改配置文件,把上面这个lua文档包含进去:
目的: 添加获取配置文件的路由:lua_redis_sku_num
vim /etc/nginx/nginx.conf
上面的代码content_by_lua_fifile /etc/nginx/lua/lua_redis.lua; 是将要执行的lua操作的redis代码封装在/etc/nginx/lua/lua_redis_sku_num.lua中
我们测试一下:
重启nginx,测试:
[root@localhost ~]# curl 127.0.0.1/lua_redis_sku_num
sku_num_123 : 9998
大功告成!
以上是关于lua在项目中的实际应用的主要内容,如果未能解决你的问题,请参考以下文章