openresty+lua+redis:
Concurrency Level: 100
Time taken for tests: 0.458 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 689000 bytes
HTML transferred: 533000 bytes
Requests per second: 2183.67 [#/sec] (mean)
Time per request: 45.794 [ms] (mean)
Time per request: 0.458 [ms] (mean, across all concurrent requests)
Transfer rate: 1469.29 [Kbytes/sec] received
<pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 color:rgb word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb>golang+redis:
Concurrency Level: 100
Time taken for tests: 0.503 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 650000 bytes
HTML transferred: 532000 bytes
Requests per second: 1988.22 [#/sec] (mean)
Time per request: 50.296 [ms] (mean)
Time per request: 0.503 [ms] (mean, across all concurrent requests)
Transfer rate: 1262.05 [Kbytes/sec] received
<phelvetica neue sans gb font-size:15px>lua代码:<pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 color:rgb word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb><span>-- redis 配置</span><span>local</span><span>params</span><span>=</span><span>{</span><span>host</span><span>=</span><span>'</span><span>127.0.0.1'</span><span>,</span><span>port</span><span>=</span><span>6379</span><span>,</span><span>}</span><span>local</span><span>red</span><span>=</span><span>redis</span><span>:</span><span>new</span><span>()</span><span>local</span><span>ok</span><span>,</span><span>err</span><span>=</span><span>red</span><span>:</span><span>connect</span><span>(</span><span>params</span><span>.</span><span>host</span><span>,</span><span>params</span><span>.</span><span>port</span><span>)</span><span>if</span><span>not</span><span>ok</span><span>then</span><span>ngx</span><span>.</span><span>say</span><span>(</span><span>"</span><span>failed to connect: "</span><span>,</span><span>err</span><span>)</span><span>return</span><span>end</span><span>local</span><span>position_key</span><span>=</span><span>ngx</span><span>.</span><span>var</span><span>.</span><span>position_key</span><span>local</span><span>content</span><span>=</span><span>red</span><span>:</span><span>get</span><span>(</span><span>position_key</span><span>)</span><span>ngx</span><span>.</span><span>print</span><span>(</span><span>content</span><span>)</span><phelvetica neue sans gb font-size:15px>golang代码 :<pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 color:rgb word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb><span>package</span><span>main</span><span>import</span><span>(</span><span>"fmt"</span><span>"github.com/garyburd/redigo/redis"</span><span>"log"</span><span>"net/http"</span><span>"time"</span><span>)</span><span>func</span><span>getConn</span><span>()</span><span>(</span><span>redis</span><span>.</span><span>Conn</span><span>,</span><span>error</span><span>)</span><span>{</span><span>conn</span><span>,</span><span>err</span><span>:=</span><span>redis</span><span>.</span><span>DialTimeout</span><span>(</span><span>"tcp"</span><span>,</span><span>":6379"</span><span>,</span><span>0</span><span>,</span><span>1</span><span>*</span><span>time</span><span>.</span><span>Second</span><span>,</span><span>1</span><span>*</span><span>time</span><span>.</span><span>Second</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>fmt</span><span>.</span><span>Println</span><span>(</span><span>err</span><span>)</span><span>}</span><span>return</span><span>conn</span><span>,</span><span>err</span><span>}</span><span>func</span><span>indexHandler</span><span>(</span><span>w</span><span>http</span><span>.</span><span>ResponseWriter</span><span>,</span><span>r</span><span>*</span><span>http</span><span>.</span><span>Request</span><span>)</span><span>{</span><span>conn</span><span>,</span><span>err</span><span>:=</span><span>getConn</span><span>()</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>http</span><span>.</span><span>Error</span><span>(</span><span>w</span><span>,</span><span>err</span><span>.</span><span>Error</span><span>(),</span><span>http</span><span>.</span><span>StatusInternalServerError</span><span>)</span><span>return</span><span>}</span><span>result</span><span>,</span><span>err</span><span>:=</span><span>conn</span><span>.</span><span>Do</span><span>(</span><span>"get"</span><span>,</span><span>"content_1"</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>http</span><span>.</span><span>Error</span><span>(</span><span>w</span><span>,</span><span>err</span><span>.</span><span>Error</span><span>(),</span><span>http</span><span>.</span><span>StatusInternalServerError</span><span>)</span><span>return</span><span>}</span><span>fmt</span><span>.</span><span>Fprintf</span><span>(</span><span>w</span><span>,</span><span>"Hello, %q"</span><span>,</span><span>result</span><span>)</span><span>}</span><span>func</span><span>main</span><span>()</span><span>{</span><span>http</span><span>.</span><span>HandleFunc</span><span>(</span><span>"/"</span><span>,</span><span>indexHandler</span><span>)</span><span>err</span><span>:=</span><span>http</span><span>.</span><span>ListenAndServe</span><span>(</span><span>":8880"</span><span>,</span><span>nil</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>log</span><span>.</span><span>Fatal</span><span>(</span><span>"ListenAndServe: "</span><span>,</span><span>err</span><span>.</span><span>Error</span><span>())</span><span>}</span><span>}</span><phelvetica neue sans gb font-size:15px>经过多次压测之后发现,nginx + lua + redis的组合确实高效,golang + redis的方案其实也差不了多少。相对于整个系统从开发到部署的方式来说,golang可能更合适,更符合开发的习惯,毕竟nginx + lua 这种方案开发和测试都略显别扭。<divhelvetica neue sans gb font-size:15px line-height:21.4285717010498px><h1helvetica neue font-weight:500 line-height:1.1>补充连接池的使用和测试结果<p>上次测试完之后,觉得这个代码还有提高的空间,于是查了下怎么在golang中使用redis连接池(其实就是redigo的使用),还有lua中怎么使用redis连接池(其实就是rest.redis的使用)。</p>
<p>先上结果:</p>
<pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb>openresty + lua + redis
Concurrency Level: 100
Time taken for tests: 0.284 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 687000 bytes
HTML transferred: 531000 bytes
Requests per second: 3522.03 [#/sec] (mean)
Time per request: 28.393 [ms] (mean)
Time per request: 0.284 [ms] (mean, across all concurrent requests)
Transfer rate: 2362.93 [Kbytes/sec] received
<p>再看golang:</p><pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb>golang + redis
Concurrency Level: 100
Time taken for tests: 0.327 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 650000 bytes
HTML transferred: 532000 bytes
Requests per second: 3058.52 [#/sec] (mean)
Time per request: 32.696 [ms] (mean)
Time per request: 0.327 [ms] (mean, across all concurrent requests)
Transfer rate: 1941.44 [Kbytes/sec] received
<p>lua代码:</p><pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb><span>-- redis 配置</span><span>local</span><span>params</span><span>=</span><span>{</span><span>host</span><span>=</span><span>'</span><span>127.0.0.1'</span><span>,</span><span>port</span><span>=</span><span>6379</span><span>,</span><span>}</span><span>local</span><span>red</span><span>=</span><span>redis</span><span>:</span><span>new</span><span>()</span><span>local</span><span>ok</span><span>,</span><span>err</span><span>=</span><span>red</span><span>:</span><span>connect</span><span>(</span><span>params</span><span>.</span><span>host</span><span>,</span><span>params</span><span>.</span><span>port</span><span>)</span><span>if</span><span>not</span><span>ok</span><span>then</span><span>ngx</span><span>.</span><span>say</span><span>(</span><span>"</span><span>failed to connect: "</span><span>,</span><span>err</span><span>)</span><span>return</span><span>end</span><span>local</span><span>position_key</span><span>=</span><span>ngx</span><span>.</span><span>var</span><span>.</span><span>position_key</span><span>local</span><span>content</span><span>=</span><span>red</span><span>:</span><span>get</span><span>(</span><span>position_key</span><span>)</span><span>ngx</span><span>.</span><span>print</span><span>(</span><span>content</span><span>)</span><span>local</span><span>ok</span><span>,</span><span>err</span><span>=</span><span>red</span><span>:</span><span>set_keepalive</span><span>(</span><span>10000</span><span>,</span><span>100</span><span>)</span><span>if</span><span>not</span><span>ok</span><span>then</span><span>ngx</span><span>.</span><span>say</span><span>(</span><span>"</span><span>failed to set keepalive: "</span><span>,</span><span>err</span><span>)</span><span>return</span><span>end</span><p>golang代码:</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/gongju/1562" title="WinNMP - Windows Nginx MySql Php 8 stack"><img
src="https://img.php.cn/upload/manual/000/000/011/169206948898083.png" alt="WinNMP - Windows Nginx MySql Php 8 stack" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/gongju/1562" title="WinNMP - Windows Nginx MySql Php 8 stack">WinNMP - Windows Nginx MySql Php 8 stack</a>
<p>WinNMP - Nginx MariaDB Redis Php 8用于Windows的开发堆栈一个轻量、快速、稳定的服务器堆栈,用于在Windows上开发php mysql应用程序,基于出色的Web服务器Nginx。是XAMPP和WAMP的轻量级替代品。也被称为WTServer和wt-nmp当前软件包包含以下最新稳定版本:- Nginx Web服务器- MariaDB 10数据库服务器,mysql替代品(32/64位)- MongoDB 4文档型数据库(64位)- Redis缓存/NoSql,memca</p>
</div>
<a href="/xiazai/gongju/1562" title="WinNMP - Windows Nginx MySql Php 8 stack" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><pre class="brush:php;toolbar:false;" courier new font-size:13px white-space:pre-wrap padding:9.5px margin:0px line-height:1.428571429 word-break:break-all word-wrap:break-word border:1px solid rgb background-color:rgb><span>package</span><span>main</span><span>import</span><span>(</span><span>"flag"</span><span>"fmt"</span><span>"github.com/garyburd/redigo/redis"</span><span>"log"</span><span>"net/http"</span><span>"runtime"</span><span>"time"</span><span>)</span><span>var</span><span>(</span><span>pool</span><span>*</span><span>redis</span><span>.</span><span>Pool</span><span>redisServer</span><span>=</span><span>flag</span><span>.</span><span>String</span><span>(</span><span>"redisServer"</span><span>,</span><span>":6379"</span><span>,</span><span>""</span><span>)</span><span>)</span><span>func</span><span>indexHandler</span><span>(</span><span>w</span><span>http</span><span>.</span><span>ResponseWriter</span><span>,</span><span>r</span><span>*</span><span>http</span><span>.</span><span>Request</span><span>)</span><span>{</span><span>t0</span><span>:=</span><span>time</span><span>.</span><span>Now</span><span>()</span><span>conn</span><span>:=</span><span>pool</span><span>.</span><span>Get</span><span>()</span><span>t1</span><span>:=</span><span>time</span><span>.</span><span>Now</span><span>()</span><span>fmt</span><span>.</span><span>Printf</span><span>(</span><span>"The call took %v to run.\n"</span><span>,</span><span>t1</span><span>.</span><span>Sub</span><span>(</span><span>t0</span><span>))</span><span>defer</span><span>conn</span><span>.</span><span>Close</span><span>()</span><span>result</span><span>,</span><span>err</span><span>:=</span><span>conn</span><span>.</span><span>Do</span><span>(</span><span>"get"</span><span>,</span><span>"content_1"</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>http</span><span>.</span><span>Error</span><span>(</span><span>w</span><span>,</span><span>err</span><span>.</span><span>Error</span><span>(),</span><span>http</span><span>.</span><span>StatusInternalServerError</span><span>)</span><span>return</span><span>}</span><span>fmt</span><span>.</span><span>Fprintf</span><span>(</span><span>w</span><span>,</span><span>"Hello, %q"</span><span>,</span><span>result</span><span>)</span><span>}</span><span>func</span><span>newPool</span><span>(</span><span>server</span><span>string</span><span>)</span><span>*</span><span>redis</span><span>.</span><span>Pool</span><span>{</span><span>return</span><span>&</span><span>redis</span><span>.</span><span>Pool</span><span>{</span><span>MaxIdle</span><span>:</span><span>3</span><span>,</span><span>IdleTimeout</span><span>:</span><span>240</span><span>*</span><span>time</span><span>.</span><span>Second</span><span>,</span><span>Dial</span><span>:</span><span>func</span><span>()</span><span>(</span><span>redis</span><span>.</span><span>Conn</span><span>,</span><span>error</span><span>)</span><span>{</span><span>c</span><span>,</span><span>err</span><span>:=</span><span>redis</span><span>.</span><span>Dial</span><span>(</span><span>"tcp"</span><span>,</span><span>server</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>return</span><span>nil</span><span>,</span><span>err</span><span>}</span><span>return</span><span>c</span><span>,</span><span>err</span><span>},</span><span>TestOnBorrow</span><span>:</span><span>func</span><span>(</span><span>c</span><span>redis</span><span>.</span><span>Conn</span><span>,</span><span>t</span><span>time</span><span>.</span><span>Time</span><span>)</span><span>error</span><span>{</span><span>_</span><span>,</span><span>err</span><span>:=</span><span>c</span><span>.</span><span>Do</span><span>(</span><span>"PING"</span><span>)</span><span>return</span><span>err</span><span>},</span><span>}</span><span>}</span><span>func</span><span>main</span><span>()</span><span>{</span><span>runtime</span><span>.</span><span>GOMAXPROCS</span><span>(</span><span>runtime</span><span>.</span><span>NumCPU</span><span>())</span><span>flag</span><span>.</span><span>Parse</span><span>()</span><span>pool</span><span>=</span><span>newPool</span><span>(</span><span>*</span><span>redisServer</span><span>)</span><span>http</span><span>.</span><span>HandleFunc</span><span>(</span><span>"/"</span><span>,</span><span>indexHandler</span><span>)</span><span>err</span><span>:=</span><span>http</span><span>.</span><span>ListenAndServe</span><span>(</span><span>":8880"</span><span>,</span><span>nil</span><span>)</span><span>if</span><span>err</span><span>!=</span><span>nil</span><span>{</span><span>log</span><span>.</span><span>Fatal</span><span>(</span><span>"ListenAndServe: "</span><span>,</span><span>err</span><span>.</span><span>Error</span><span>())</span><span>}</span><span>}</span><p>golang中除了添加了线程池,还设置了cpu核数。</p><p>不过这个测试并不十分严谨,redis,nginx,golang http server,ab压测都在一台机器,相互之间会有影响。有兴趣的可以自己分开部署测试下。</p>
<p>
以上就介绍了nginx+lua+redis,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。</p>
<p>
</p>
0
0
相关文章
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。
705
2026.02.13
本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。
233
2026.02.13
本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。
117
2026.02.13
本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。
22
2026.02.13
本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。
61
2026.02.13
本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。
15
2026.02.12
本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。
669
2026.02.12
本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。
58
2026.02.12
热门下载
精品课程
共26课时 | 3.5万人学习
最新文章

