热门标签 | 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;

}



推荐阅读
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • Spring Boot单元测试中Redis连接失败的解决方案
    本文探讨了在Spring Boot项目中进行单元测试时遇到Redis连接问题的原因及解决方法,详细分析了配置文件加载路径不当导致的问题,并提供了有效的解决方案。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 精选Unity开源项目:UniRx实现响应式编程
    本文介绍了Unity中的响应式编程框架——UniRx,探讨了其在解决异步编程难题中的应用及优势。 ... [详细]
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社区 版权所有