nginx+lua+redis构建高并发应用

php的高并发一般分为2种:
1、让流量尽量限制在上游的层面,不要一下子涌入后端服务
2、读写分离,对请求做缓存,写请求尽量入队列分批透给数据库。


当请求进入php的生命周期时,io就是它的瓶颈了,因为每个php进程在请求io的时候是同步阻塞的,等待结果返回才退出脚本。但是lua不同,背靠nginx,利用了 epoll 的特性,提高了请求的吞吐量。

Lua是什么?

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

设计目的?

为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

应用场景?
  • 游戏开发
  • 独立应用脚本
  • Web 应用脚本
  • 扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
  • 安全系统,如入侵检测系统
nginx+lua+redis构建高并发应用

利用nginx+lua+redis自定义分流客户端条件,后端db物理隔离

思路:ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。url请求nginx服务器,然后lua查询redis,返回json数据。

  • 安装lua,nginx,lua-redis-parser,json,redis-lua
  • 配置nginx
events {
	worker_connections 1024;
	use epoll;
}

http {

	upstream redis_pool {
	server 192.168.1.39:6379;
		keepalive 1024 single; // 定义连接池大小,当连接数达到此数后,后续的连接为短连接
	}

	server {
		listen 80;
		server_name 192.168.1.211;

		location /get_redis{
		set_unescape_uri $key $arg_key;
		redis2_query hgetall $key;
		redis2_pass redis_pool;
		}

		location /json {
			content_by_lua_file conf/test.lua;
		}
	}
}
  • 编辑test.lua文件
local json = require("json")
local parser = require("redis.parser")
local res = ngx.location.capture("/get_redis",{
args = { key = ngx.var.arg_key }
})

if res.status == 200 then
	reply = parser.parse_reply(res.body)
	value = json.encode(reply)
	ngx.say(value)
	a = json.decode(value)
	ngx.say(a[2])
end
  • 测试
    curl ‘http://192.168.1.211/json?key=test’
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值