Nginx+Redis 搭建高性能缓存利器

作者阿里云代理 文章分类 分类:linux图文教程 阅读次数 已被围观 721

一. OpenResty

OpenResty是一个根据 Nginx与 Lua的高性能 Web渠道,其内部集成了大量精良的 Lua库、第三方模块以及大多数的依赖项。用于方便地建立可以处理超高并发、扩展性极高的动态Web 运用、Web 服务和动态网关。

接入层缓存技能便是运用OpenResty的技能用Lua言语进行二次开发。


二.Nginx +redis

下图左面是常用的架构,http恳求经过nginx负载均衡转发到tomcat,tomcat再从redis读取数据,整个链路过程是串行的,当tomcat挂掉或者tomcat线程数被消耗完,就无法正常回来数据。

运用OpenResty的lua-resty-redis模块使nginx具备直接访问redis的才能,不占用tomcat线程,Tomcat暂时挂掉仍可正常处理恳求,减少呼应时长,进步体系并发才能。


三.紧缩减少带宽

数据大于1K,nginx紧缩再保存到redis:

  • 进步redis的读取速度
  • 减少带宽的占用

紧缩会消耗cpu时刻,小于1K的数据不紧缩tps更高。

OpenResty并没有提供redis连接池的完成,需求自己用lua完成redis的连接池,在网上已有完成的比方http://wiki.jikexueyuan.com/project/openresty/redis/out_package.html,直接参照运用。

Redis的value值用json格局保存{length:xxx,content:yyy},content是紧缩后的页面内容,length是content紧缩前的巨细,length字段是为了在读取redis时,根据length的巨细来判别是否要解紧缩content的数据。

运用lua-zlib库进行紧缩。


四. 守时更新

按下图第1和第2步守时执行,nginx lua守时器守时恳求tomcat页面的url,回来的页面html保存在redis。

缓存有效期可设置长些,比方1个小时,可确保1个小时内tomcat挂掉,仍可运用缓存数据回来,缓存的守时更新时刻可设置短些,比方1分钟,确保缓存快速更新


五.恳求转发

浏览器翻开页面:

  • nginx先从redis获取页面html
  • redis不存在数据时,从tomcat获取页面,一起更新redis
  • 回来页面HTML给浏览器


六. 单进程守时更新

Nginx的一切worker进程都可以处理前端恳求转发到redis,只要nginx worker 0才运转守时使命守时更新redis,lua脚本中经过ngx.worker.id()获取worker进程编号。


七 . 可装备化

经过办理后台装备需求缓存的URL,可装备缓存URL、缓存有效期、守时更新时刻,比方modify?url=index&&expire=3600000&&intervaltime=300000&sign=xxxx,sign的值是办理后台secretkey对modify?url=index&&expire=3600000&&intervaltime=300000签名运算得到的,nginx端用相同的secretkey对modify?url=index&&expire=3600000&&intervaltime=300000签名运算,得到的值与sign的值相同则鉴权经过,允许修正nginx的装备。

本公司销售:阿里云、腾讯云、百度云、天翼云、金山大米云、金山企业云盘!可签订合同,开具发票。

我有话说: