`
kavy
  • 浏览: 893326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx与Redis解决高并发问题

 
阅读更多
                               
近期刚改版了上月上线的一个产品应用,以应对将来可能的高并发问题。

       第一版产品采用的是JqueryNginxPHPCI框架),MemcacheMysql这种常用的架构。作为一名PHP工程师对于这种架构已经非常的熟悉了,目前站点并发并不是很高,线上环境使用的是阿里云主机,1.5G的内存,PHP并发能支持400~500左右。因为使用memcache的原因,如果在并发特别高的情况下,除了带宽瓶颈以外就可能会是一直引以为傲PHP瓶颈了。增加机器便会增加成本,对于一个刚刚上线运行的项目,要求公司扩大投入是不合理的。

     于是在第二次改版的过程中我们尝试放弃PHP,采用OpenResty中的LuaJit模块直接读取redis中的数据以Json的格式返回给前端页面展示,使用PHP脚本定时执行向redis里面更新内容。这样整合个前端过程就没啥phpmysql哈事了(除后端定时执行脚本之外)。凭着nginxredis的高并发,还怕啥呀!。下图为新的架构主要结构。

 

        Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcache这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了PythonRubyErlangPHP客户端,使用很方便。
性能测试结果:SET操作每秒钟110000 次,GET操作每秒钟81000 

        有了Redis作为保障,新架构就可以开搞了,使用到的主要关键词由openRestyLuaJitLuaRedisPHPPHPRedisJSonJQuery等组成。读者可以搜索下各名词了解它们的功能。下面是openResty中的Nginx配置:

nginx.conf
server {
        listen   80;

        root/home/boolean/Htdocs/lib.bincent.com;
        index index.htmlindex.htm;
        server_namelib.bincent.cn;

        #默认请求Html转发到apache,这里你可以根据自己情况配置
        location /
        {
                proxy_redirect off; 
                proxy_set_header HOST$host;  
                proxy_set_headerSERVER_ADDR $server_addr;  
                proxy_set_headerSERVER_PORT $server_port;  
                proxy_set_headerREMOTE_ADDR $remote_addr;  
                proxy_set_headerREMOTE_PORT $remote_port;  
                proxy_pass  http://lib.bincent.cn:8080;
        }

           #更新redis
        location /set_redis
        {
            internal;
            set_unescape_uri$key $arg_key;
                set_unescape_uri$val $arg_val;
                redis2_queryset $key $val;
            redis2_pass127.0.0.1:6379;
        }

           #读取redis
        location /get_redis
        {
            internal;
            set_unescape_uri$key $arg_key;
            redis2_queryget $key;
            redis2_pass127.0.0.1:6379;
        }

           模拟的简单请求
        location /json
        {
            default_typetext/html;
                 content_by_lua_file/home/boolean/Htdocs/lib.bincent.com/lua/redis.lua;
        }

}

redis.lua文件
#通过URL更新redis
functionsetRedis(key, val)
    localres = ngx.location.capture('/set_redis', {
                args= {
                     key= key,
                     val= val
                    }
                })
    ifres.status == 200 then
        returntrue
    else
        returnfalse
    end
end
#通过URL读取redis
functiongetRedis(key)
    localcapture = ngx.location.capture('/get_redis', {
                args= {
                    key= key
                    }
                })
    localparser = require 'redis.parser' --require redis.parser
    localres, err = parser.parse_reply(capture.body)
   
    returnres
end
#URL参数$_GET['a']
locala = ngx.var.arg_a
if'clean' == a then
    --重置redis
    ifsetRedis('love_number', 0) then
        ngx.say("CleanRedis Is Success!")
    else
        ngx.say("CleanRedis Is failted!")
    end
else
    --读取redis
    locallove_number = getRedis('love_number') + 1
    setRedis('love_number',love_number)
    ngx.say("CurrentLove Number Is: ", love_number)
end

 

 

转自:http://bbs.phpchina.com/thread-229629-1-1.html

分享到:
评论
1 楼 zhangping2056 2014-01-08  
楼主接下来要考虑页面静态化与细节上面的东西了

相关推荐

    nginx+redis负载均衡、session共享

    这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP请求,并确保用户会话(session)在多台服务器之间的一致性。 首先,我们来详细了解一下Nginx。...

    nginx 整合redis以及lua语言

    在IT行业中,尤其是在Web服务和高性能缓存领域,Nginx和Redis是非常关键的组件。本文将深入探讨如何整合Nginx与Redis,并利用Lua语言增强Nginx的功能。我们将介绍相关工具和模块,以便更好地理解和实现这个集成过程...

    nginx+lua+redis 集群 连接插件和脚本

    在这个“nginx+lua+redis集群”解决方案中,提供的连接插件可能是指Nginx与Redis之间的通信模块,例如lua-redis-pconnector,这个插件允许Nginx通过Lua脚本直接与Redis进行交互。而脚本部分可能包括了处理业务逻辑、...

    nginx+redis实现session共享

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"nginx+redis实现session共享"的主题就涉及到了这一核心需求。...学习和理解这些内容对于提升IT专业人士在高并发、分布式环境下的系统设计和运维能力至关重要。

    nginx,redis安装包,集群架构使用

    在实际应用中,结合Nginx和Redis的集群架构,可以构建出高可用、高并发的Web服务,有效应对大量用户请求和数据处理需求。同时,根据业务特性调整配置,如Nginx的缓存策略、Redis的数据过期策略等,可以进一步优化...

    Nginx+Redis+Tomcat 集群部署

    在构建高性能、高可用性的Web服务时,"Nginx+Redis+Tomcat 集群部署"是一种常见的架构模式。这种模式结合了Nginx的反向代理和负载均衡能力,Redis的数据缓存功能,以及Tomcat的Java应用服务器性能,能够有效提升系统...

    springboot+Nginx+redis实现session共享

    通过这个项目,开发者可以学习到如何在高并发环境中,结合Spring Boot的灵活性、Nginx的负载均衡能力和Redis的高速缓存特性,实现高效且可靠的Session共享。这对于构建可扩展的分布式Web系统至关重要。在实际项目中...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    2. **Nginx**: Nginx是一款高性能的HTTP和反向代理服务器,以其高并发、低内存消耗和稳定性著称。在Tomcat集群前部署Nginx,可以实现负载均衡,将用户请求分发到不同的Tomcat实例上,提高系统的响应速度和可用性。 ...

    Nginx+tomcat+redis

    - **session共享**:在分布式环境中,Redis可以作为session存储,解决跨服务器的session共享问题,确保用户会话的一致性。 - **消息队列**:Redis支持发布/订阅模型,可以作为简单消息队列,用于异步处理任务或...

    Java高级课程(nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战)

    Java高级互联网架构师系统培训班课程Java高级互联网架构师系统培训班课程Java高级互联网架构师系统培训班课程

    Nginx+Lua+Redis构建高并发Web应用

    总结起来,Nginx+Lua+Redis的组合提供了一种强大的工具集,能够有效地处理高并发Web应用的需求。通过在Nginx中集成Lua,我们可以处理复杂的业务逻辑,而Redis则作为快速数据存储和访问的后端。这种架构不仅提高了...

    tomcat+nginx+Redis集成demo

    Nginx是一款高性能的HTTP和反向代理服务器,以其轻量级、高并发处理能力著称。Redis则是一个内存中的数据存储系统,常用于缓存和快速数据访问。 【描述】中提到的"tomcat+nginx+Redis集成demotomcat+nginx+Redis...

    linux下Tomcat+nginx+redis负载均衡配置

    Linux 下 Tomcat+nginx+redis 负载均衡...Linux 下 Tomcat+nginx+redis 负载均衡配置是一种高性能、高可用性的解决方案,能够满足高流量网站的需求。但是,需要进行充分的测试和优化,以便确保系统的稳定性和安全性。

    windows系统下nginx+tomcat+redis做负载均衡和session粘滞附整套解决方案

    为解决这个问题,我们可以引入Redis作为分布式Session存储。Redis是一个内存数据结构存储系统,可以快速读取和写入,非常适合用于存储Session。 在我们的解决方案中,Nginx配置会启用Session粘滞(Session ...

    Nginx+Lua+Redis+Json

    "Nginx、Lua、Redis 和 Json 的结合应用" Nginx 是一个高性能的 ...本文介绍了如何使用 Nginx、Lua、Redis 和 Json 来构建一个高效的系统,能够处理高并发的请求,并提供了丰富的功能和模块来满足大多数的应用场景。

    lua+redis+nginx

    `Redis` 的高并发读写性能和持久化机制使其成为缓存和实时数据操作的理想选择。在 `Lua` 和 `Nginx` 架构中,`Redis` 常用于存储会话信息、实现队列服务、缓存热点数据,或者作为分布式锁的实现基础。通过 `Lua` ...

    redis-nginx-linux-windows部署软件.rar

    同时,利用工具如 Redis 监控模块和 Nginx 日志分析工具,可以实时监控系统运行状态,及时发现并解决问题。 综上所述,Redis 和 Nginx 的部署涉及多个环节,包括安装、配置、启动和服务测试。在不同操作系统上,...

    nginx+tomcat+redis负载均衡所需jar及nginx、redis文件及说明文档

    同时,监控系统性能和日志,以便及时发现和解决问题,保障服务的稳定性和安全性。 这个压缩包提供的资源将帮助你快速搭建一个基于`Nginx+Tomcat+Redis`的负载均衡和会话共享环境,对于大型、高流量的Web应用来说,...

Global site tag (gtag.js) - Google Analytics