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

}



推荐阅读
  • 01windows下载与安装neo4j
    1。因为neo4j的官网总是在变,所以下载地址有时候找不到neo4j3.1.0Releases官方下载链接windows64ziphttps:neo4j.comar ... [详细]
  • 为何存在requests库,pycharm依然报错解决方法
    今天在使用pycharm的时候,用到了第三档库requests,提示有错误,报错显示Nomodulenamedrequests,于是请教了大神们,然后让我在pycharmconso ... [详细]
  • 如何在matplotlib中利用mpldatacursor实现一个交互式数据光标
    如何在matplotlib中利用mpldatacursor实现一个交互式数据光标?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解, ... [详细]
  • php怎么保留小数点两位(php去除小数点)
    导读:今天编程笔记来给各位分享关于php怎么保留小数点两位的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 分隔超平面:将数据集分割开来的直线叫做分隔超平面。超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界。间隔:一个点 ... [详细]
  • 自己理解git是一个仓库工具,安装在本机上面。无需账号,gitbash和gitgui可以进行操作gitee和github是云仓库,用于 ... [详细]
  • 0157.K 升级 kubeadm 集群_一主两从
    升级kube ... [详细]
  • 使用Swoole的时候出现以下问题,如何解决呢?不是太懂,希望高手们能帮帮忙!谢谢了!是运行https://github.com/matyhtf/webim里的开源项目:matyh ... [详细]
  • 偶然有需求了解别人的小程序实现方法,网上相关资料很多,顺便了解了一下,做个总结,没啥技术含量,分享出来。要求安装Nodejs一台root后的安卓手机或者装有可以打开微信小程序的安卓 ... [详细]
  • 基于bionic c分析线程的一生
    1.概述和问题进程和线程操作系统基础和重要的机制,从源码角度理解进程和线程的区别对于理解操作系统的基本原理非常有帮助,同时进程和线程的创建又是通过系统 ... [详细]
  • 自建Gitlab(邮箱配置、拆分PostgreSQL、Redis)+随想
    前言最近折腾了一番自建gitlab,在此做个记录,供君参考。整个构建过程基于DockerSwarm(近期有计划将微服务移植到Kubernetes,但还没倒腾顺手,暂时先沿用旧的方案 ... [详细]
  • MAC如何设置通知栏显示iTunes歌曲更换信息
    友情提示:教程内容为了更好的解决大家的问题,所以电脑教程网的每一篇内容都是图文并茂的在多端设备下呈现给大家。告诉大家的是,文章内里的图片也尤为重要, ... [详细]
  • 支持 dd 命令的简单的 GUI 实用程序
    Kindd-支持dd 命令的简单的GUI实用程序“Kindd”,一个属于dd 命令的图形化前端。它是自由开源的、用QtQuick所写的工具。总的来说,这个工具对那些对命令行不适应的 ... [详细]
  • 参考链接:http:blog.csdn.nethh5945articledetails51014705本文记录opencv3.1及其contrib模块在ubuntu ... [详细]
  • gitcommit-m提交所有本地文件 ... [详细]
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社区 版权所有