nginx+lua+redis构建高并发应用(转)

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

ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。

url请求nginx服务器,然后lua查询redis,返回json数据。

备注:centos或者redhat系统请跳转到nginx + ngx_lua安装测试

一.安装lua

1

2

3

# apt-get install lua5.1

# apt-get install liblua5.1-dev

# apt-get install liblua5.1-socket2

二.安装nginx

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# apt-get install git-core

# git clone https://github.com/simpl/ngx_devel_kit.git

# git clone https://github.com/chaoslawful/lua-nginx-module.git

# git clone https://github.com/agentzh/redis2-nginx-module.git

# git clone https://github.com/agentzh/set-misc-nginx-module.git

# git clone https://github.com/agentzh/echo-nginx-module.git

# git clone https://github.com/catap/ngx_http_upstream_keepalive.git

# apt-get install libpcre3 libpcre3-dev libltdl-dev libssl-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev libxml2-dev libcurl4-openssl-dev libmcrypt-dev autoconf libxslt1-dev libgd2-noxpm-dev libgeoip-dev libperl-dev -y

# wget http://nginx.org/download/nginx-1.0.8.tar.gz

# tar zxvf nginx-1.0.8.tar.gz

# cd nginx-1.0.8

# ./configure --prefix=/usr/local/nginx --with-debug --with-http_addition_module \

--with-http_dav_module --with-http_flv_module --with-http_geoip_module \

--with-http_gzip_static_module --with-http_image_filter_module --with-http_perl_module \

--with-http_random_index_module --with-http_realip_module --with-http_secure_link_module \

--with-http_stub_status_module --with-http_ssl_module --with-http_sub_module \

--with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl \

--with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module \

--add-module=../ngx_devel_kit \

--add-module=../echo-nginx-module \

--add-module=../lua-nginx-module \

--add-module=../redis2-nginx-module \

--add-module=../ngx_http_upstream_keepalive \

--add-module=../set-misc-nginx-module

# make

# make install

三.安装lua-redis-parser

1

2

3

4

# git clone https://github.com/agentzh/lua-redis-parser.git

# export LUA_INCLUDE_DIR=/usr/include/lua5.1

# make CC=gcc

# make install CC=gcc

四.安装json

1

2

3

# wget http://files.luaforge.net/releases/json/json/0.9.50/json4lua-0.9.50.zip

# unzip json4lua-0.9.50.zip

# cp json4lua-0.9.50/json/json.lua /usr/share/lua/5.1/

五.安装redis-lua

1

2

# git clone https://github.com/nrk/redis-lua.git

# cp redis-lua/src/redis.lua /usr/share/lua/5.1/

六.配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

user www-data;

worker_processes 8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

error_log logs/error.log notice;

pid logs/nginx.pid;

worker_rlimit_nofile 60000;

events {

worker_connections 1024;

use epoll;

}

http {

include mime.types;

default_type application/octet-stream;

access_log logs/access.log;

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 60;

types_hash_max_size 2048;

server_tokens off;

lua_code_cache on;

upstream redis_pool {

server 192.168.1.39:6379;

keepalive 1024 single; //定义连接池大小,当连接数达到此数后,后续的连接为短连接

}

server {

listen 80;

server_name 192.168.1.211;

location /get_redis{

#internal;

set_unescape_uri $key $arg_key;

redis2_query hgetall $key;

redis2_pass redis_pool;

}

location /json {

content_by_lua_file conf/fuck.lua;

}

}

}

# vim fuck.lua

1

2

3

4

5

6

7

8

9

10

11

12

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

七.测试

# redis-cli -h 192.168.1.39

1

2

3

redis 192.168.1.39:6379> HMSET ttlsa www www.ttlsa.com mail mail.ttlsa.com

OK

# curl ‘http://192.168.1.211/json?key=ttlsa‘

1

["www","www.ttlsa.com","mail","mail.ttlsa.com"]

www.ttlsa.com

http://www.ttlsa.com/nginx/nginx-lua-redis/

时间: 2024-12-28 17:53:17

nginx+lua+redis构建高并发应用(转)的相关文章

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

ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求. url请求nginx服务器,然后lua查询redis,返回json数据. 一.安装lua-nginx-module 参见<LNMLGC>架构 二.安装redis2-nginx-module模块 get https://github.com/openresty/echo-nginx-module get https://github.com/openresty/redis2-nginx-modul

Nginx与Redis解决高并发问题

原文链接:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=229629 第一版产品采用的是Jquery,Nginx,PHP(CI框架),Memcache,Mysql这种常用的架构.作为一名PHP工程师对于这种架构已经非常的熟悉了,目前站点并发并不是很高,线上环境使用的是阿里云主机,1.5G的内存,PHP并发能支持400~500左右.因为使用memcache的原因,如果在并发特别高的情况下,除了带宽瓶颈以外就可能会是一直引以为傲PHP瓶颈了

nginx +lua +redis 构建自动缓存系统

一. nginx环境搭建 第一步下载 LuaJIT-2.0.4.tar.gz http://luajit.org/download/LuaJIT-2.0.4.tar.gz安装 make && make install 第二步下载nginx依赖的模块:openssl-1.0.2e.tar.gz https://www.openssl.org/source/old/1.0.2/openssl-1.0.2g.tar.gzpcre-8.37.tar.gz http://exim.mirror.fr

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

ngx_lua将lua嵌nginx,让nginx运行lua脚本.高并发,非堵塞过程中的各种请求. url要求nginxserver,然后lua查询redis,返回json数据. 一.安装lua-nginx-module 參见<LNMLGC>架构 二.安装redis2-nginx-module模块 get https://github.com/openresty/echo-nginx-module get https://github.com/openresty/redis2-nginx-mod

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构.大数据.搜索.开源技术 QQ:306591368 技术Blog:http://blog.csdn.net/yangbutao 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包

构建高并发高可用的电商平台架构实践(上)

构建高并发高可用的电商平台架构实践(上) 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer.cache机制(数据库,中间件等) 2)      索引 哈希.B树.倒排.bitmap 哈希索

Redis实现高并发分布式序列号

使用Redis实现高并发分布式序列号生成服务 序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和自增序列构成.比如我们常见的身份证号.银行卡号.社保电脑号等等. 以某公司产品标识码(代表该产品的唯一编码)的构成为例: 规则定义:商品款号(8位)+颜色号(3位)+号型码(3位) (共14位) 其标识码为:62X19001 001 46A 业务含义为: 2009年男装秋冬季仿毛套西黑色170A版

nginx lua redis 访问频率限制(转)

1. 需求分析 Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的需求. Nginx处理请求的过程一共划分为11个阶段,分别是: post-read.server-rewrite.find-config.rewrite.post-rewrite. preaccess.access.post-access.try-files.content.log. 在openre

Nginx+Lua+Redis配置

想在Nginx上开发具有这样功能的一个转发模块,外部转发策略控制服务器将一些指定的URL发送给数据库,Nginx读取数据库中的URL列表,将列表指定的这些URL转发到特定的缓存代理服务器上,其他非数据库URL列表中的URL请求直接通过Nginx转发到出口网关上.实际上以上的功能就是很多网站利用Nginx做负载均衡时的实现的七层转发功能,不太一样的是,我想加一个外部的转发策略控制服务器将一些实时的URL列表发送给Nginx,这样如果这些URL信息是根据大数据处理结果统计出的最高热点访问URL,就可