热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ngx_luaredisphp比较,Nginx嵌入Lua语言实现redis的高性能http接口

redis没有直接提供一个http的接口,要是用php,python,当然也是可以实现的。性能的比较的话,lua的能力要比p

redis没有直接提供一个http的接口,要是用php,python,当然也是可以实现的。

性能的比较的话,lua的能力要比php强的不少。。。

网上有很多的性能的比较,我也做过几次的压力测试,lua的性能确实很强。。。。

安装nginx,以及lua环境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

yum -y install pcre pcre-dev*

wget http://nginx.org/download/nginx-1.3.14.tar.gz

tar zxvf nginx-1.3.14.tar.gz

cd nginx-1.3.14

./configure --prefix=/usr/local/nginx --add-module=../ngx_devel_kit/ --add-module=../lua-nginx-module --add-module=../redis2-nginx-module --add-module=../set-misc-nginx-module --add-module=../echo-nginx-module

make && make install

注:在 server 段里,加入代码,如果不加此代码或者设置为 on 时,则需要重启 Nginx。

lua_code_cache off;

Nginx.conf

server{

listen 80;

server_name test.lua.com;

#http://test.lua.com/lua

location /hello {

default_type "text/plain";

content_by_lua 'ngx.say("Nginx Lua Hello!")';

}

#GET http://test.lua.com/get?key=key

location /get {

set_unescape_uri $key $arg_key;

redis2_query get $key;

redis2_pass 127.0.0.1:6379; #配置redis访问

}

#SET http://test.lua.com/set?key=key&val=value

location /set {

set_unescape_uri $key $arg_key;

set_unescape_uri $val $arg_val;

redis2_query set $key $val;

redis2_pass 127.0.0.1:6379;

}

}

重启Nginx

/etc/init.d/nginx restart

也可以直接用lua调用redis的接口

local ckid = redis.pcall('get',KEYS[1])

local meta

if ckid ~= nil then

meta = redis.call('hgetall', ckid)

else

meta = 'none'

ckid = 'none'

end

return {ckid, meta}

分享一个完成的实例:location /foo {

set $value 'first';

redis2_query set one $value;

redis2_pass 127.0.0.1:6379;

}

# GET /get?key=some_key

location /get {

set_unescape_uri $key $arg_key; # this requires ngx_set_misc

redis2_query get $key;

redis2_pass foo.com:6379;

}

# GET /set?key=one&val=first%20value

location /set {

set_unescape_uri $key $arg_key; # this requires ngx_set_misc

set_unescape_uri $val $arg_val; # this requires ngx_set_misc

redis2_query set $key $val;

redis2_pass foo.com:6379;

}

# multiple pipelined queries

location /foo {

set $value 'first';

redis2_query set one $value;

redis2_query get one;

redis2_query set one two;

redis2_query get one;

redis2_pass 127.0.0.1:6379;

}

location /bar {

# $ is not special here...

redis2_literal_raw_query '*1\r\n$4\r\nping\r\n';

redis2_pass 127.0.0.1:6379;

}

location /bar {

# variables can be used below and $ is special

redis2_raw_query 'get one\r\n';

redis2_pass 127.0.0.1:6379;

}

# GET /baz?get%20foo%0d%0a

location /baz {

set_unescape_uri $query $query_string; # this requires the ngx_set_misc module

redis2_raw_query $query;

redis2_pass 127.0.0.1:6379;

}

location /init {

redis2_query del key1;

redis2_query lpush key1 C;

redis2_query lpush key1 B;

redis2_query lpush key1 A;

redis2_pass 127.0.0.1:6379;

}

location /get {

redis2_query lrange key1 0 -1;

redis2_pass 127.0.0.1:6379;

}



推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 深入体验Python的高级交互式Shell - IPython
    IPython 是一个增强型的 Python 交互式 Shell,提供了比标准 Python 控制台更为强大的功能,适用于开发和调试过程。它不仅支持直接执行 Linux 命令,还提供了丰富的特性来提高编程效率。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • SSL 错误:目标主机名与备用证书主题名称不匹配
    在使用 `git clone` 命令时,常见的 SSL 错误表现为:无法访问指定的 HTTPS 地址(如 `https://ip_or_domain/xxxx.git`),原因是目标主机名与备用证书主题名称不匹配。这通常是因为服务器的 SSL 证书配置不正确或客户端的证书验证设置有问题。建议检查服务器的 SSL 证书配置,确保其包含正确的主机名,并确认客户端的证书信任库已更新。此外,可以通过临时禁用 SSL 验证来排查问题,但请注意这会降低安全性。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 探讨异步 Rust 中多线程代码无法实现并行化的原因及解决方案。 ... [详细]
author-avatar
Edgar__一峰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有