网站首页 > 技术教程 正文
- 一. OpenResty
- 二.Nginx +redis
- 三.压缩减少带宽
- 四. 定时更新
- 五.请求转发
- 六. 单进程定时更新
- 七 . 可配置化
一. 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的配置。
猜你喜欢
- 2024-10-15 你应该知道的C语言Cache命中率提升法
- 2024-10-15 Nginx 缓存类型(nginx缓存原理及配置)
- 2024-10-06 如何通过使用“缓存”相关技术,解决“高并发”的业务场景案例?
- 2024-10-06 硬盘出故障、机房被雷劈,云服务能不能靠点儿谱?
- 2024-10-06 蓝易云 - nginx反向代理缓存教程。
- 2024-10-06 Nginx入门到实战-负载均衡和缓存服务
- 2024-10-06 详细介绍一些Nginx的高级用法?(nginx 使用)
- 2024-10-06 15《Nginx 入门教程》Nginx中的缓存与压缩配置
- 2024-10-06 「Nginx」实现负载均衡、限流、缓存、黑白名单和灰度发布
- 2024-10-06 nginx缓存优先级(nginx 优先级)
你 发表评论:
欢迎- 最近发表
-
- 搞懂linux awk的使用(linux awk $1)
- ZYNQ QSPI flash分区设置&启动配置
- Linux 的 18 个装 B 命令,记得全部搂一遍
- 【Linux】程序执行的黑魔法:五分钟彻底搞懂 Linux ELF 文件
- 聊一聊 Linux 上对函数进行 hook 的两种方式
- 第十二节 Ubuntu 系统 Docker 镜像安装与容器运行指南
- Linux常用场景-VIM文本编辑批量替换
- Linux 下使用 killall 命令终止进程的 8 大用法
- 告别Permission denied!手把手教你玩转Linux文件权限
- [Linux Shell]批量更改文件&文件夹 名大写为小写
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)