您的位置:首页 > 数据库 > Redis

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

2013-07-30 21:14 736 查看
nginx+lua+redis构建高并发应用ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。url请求nginx服务器,然后lua查询redis,返回json数据。一.安装lua# apt-get install lua5.1# apt-get install liblua5.1-dev# apt-get install liblua5.1-socket2
二.安装nginx# 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# 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# 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# git clone https://github.com/nrk/redis-lua.git# cp redis-lua/src/redis.lua /usr/share/lua/5.1/
六.配置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.lualocal 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 thenreply = 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.39redis 192.168.1.39:6379> HMSET ttlsa www www.ttlsa.com mail mail.ttlsa.comOK# curl ‘http://192.168.1.211/json?key=ttlsa’["www","www.ttlsa.com","mail","mail.ttlsa.com"]www.ttlsa.com

本文出自 “燕雀安知鸿鹄之志哉” 博客,请务必保留此出处http://who0168.blog.51cto.com/253401/1260856
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: