nginx优化以及多级缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx优化以及多级缓存相关的知识,希望对你有一定的参考价值。
参考技术A 配置文件:lua是一个小巧的脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
应用场景:游戏开发、独立应用脚本、redis中嵌套调用实现类似事务的功能,web容器汇总处理nginx的过滤缓存等等逻辑
OpenResty是一个基于Nginx与Lua的高性能web平台,由中国人章亦春发起,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便搭建能处理超高并发、扩展性极高的动态Web应用、web服务和动态网关
OpenResty简单理解成就相当于封装了NGINX,并且集成了LUA脚本,开发人员只需要简单的使用其提供了模块就可以实现相关的逻辑,而不像之前,还需要在NGINX中编写lua的脚本。
1.拉取一个openresty的镜像
2.随便构建一个容器用于拷贝配置文件
3.进入容器,查找配置文件路径(这里直接给出)
4.退出容器,复制容器中配置文件到宿主机
5.修改配置文件
1、使用Lua查询Nginx缓存,如果有缓存,则直接将缓存中的分类数据返回
2、如果Nginx缓存中没有分类数据,则通过Lua脚本查询Redis,如果Redis中有数据,则将数据存入到Nginx缓存中,并返回查询到的数据
3、如果Redis中也没有缓存,则此时通过Lua脚本查询mysql,如果Mysql中有数据,将分类数据存入到Redis缓存,并返回数据
SpringCache优化、缓存一致性、多级缓存
参考技术A 先记录一些纲要1、SpringCache是写库之后更新的策略,对缓存一致性的不太友好
2、继承RedisCacheManager重写createRedisCache,继承RedisCache重写put
3、缓存一致性有两个方案,一个是先写库再删除缓存、第二个是先删除缓存再写库。
先写库再删除缓存配合超时时间一般没啥问题,极端的情况遇到缓存失效,线程读库和加缓存之间,完成了一次写库和删缓存的操作,导致加的缓存是旧的。总结就是读中加入了一次写。A读库 B写库 B删缓存 A加缓存。
先删缓存再写库的话,是写中加入了一次读。A删缓存 B读库 B加缓存 A写库A。这个概率比上面的大。
这两种方案的问题的解决方式是一样的,就是延时双删策略。即:
删缓存 写库 延时再次删除缓存(需超过一次读库的时间,可以新启线程完成)
或者 写库 删缓存 延时再次删除缓存(需超过一次读库的时间,可以新启线程完成)
如果有主从读写分离,需要将延时再加上主从同步的时间。
还有个第二次删除失败的问题,这个问题可以通过消息中间件,反复尝试进行。或者通过订阅binlog,反复进行。
多级缓存可以参考阿里开源的JetCache的实现
后面会给出demo和源码解析。
以上是关于nginx优化以及多级缓存的主要内容,如果未能解决你的问题,请参考以下文章
Nginx服务优化之隐藏版本号修改用户与组配置页面缓存与时间日志分割以及设置连接超时