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

}



推荐阅读
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • 精选Unity开源项目:UniRx实现响应式编程
    本文介绍了Unity中的响应式编程框架——UniRx,探讨了其在解决异步编程难题中的应用及优势。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 任务,栈, ... [详细]
  • 利用RabbitMQ实现高效延迟任务处理
    本文详细探讨了如何利用RabbitMQ实现延迟任务,包括其应用场景、实现原理、系统设计以及具体的Spring Boot实现方式。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 随着EOS主网的成功启动,众多开发者和投资者对其给予了高度关注。本文旨在介绍如何构建EOS开发环境,包括所需的基本硬件配置、软件安装步骤以及常见问题的解决方案。 ... [详细]
  • 了解如何快速搭建属于自己的个人博客,无需编程基础,适合Mac和Windows用户。通过本文,您将学会使用GitHub Pages和Hexo构建一个完全自主的在线空间。 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • Java Set集合源码深度解析
    本文将深入探讨Java集合框架中的Set接口及其主要实现类HashSet、LinkedHashSet和TreeSet的源码实现,帮助读者理解这些集合类的工作原理及应用场景。 ... [详细]
  • 本文详细介绍了C++标准模板库(STL)中各容器的功能特性,并深入探讨了不同容器操作函数的异常安全性。 ... [详细]
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社区 版权所有