多级缓存总结

第一级nginx 负责 静态资源存储和反向代理
- 将请求路由到openResty的nginx集群中
第二级nginx集群 实现第一级缓存,即nginx本地缓存
# 共享字典,也就是本地缓存,名称叫做:item_cache,大小150M lua_shared_dict item_cache 150m;- 当请求路由到此时,它优先查询本地缓存,本地缓存没有在查询redis缓存,redis缓存没有在去访问tomcat端口获得信息
- 访问的代码逻辑,用lua语言编写,在
/usr/local/openresty/nginx/lua/item.lua中 - 编写了一些 封装好的函数,在
/usr/local/openresty/lualib/common.lua中
- 访问的代码逻辑,用lua语言编写,在
- 在访问tomcat集群的时候,因为tomcat内部做了进程缓存,但是进程之间缓存不共享,所以在路由请求时不采用默认的轮询测策略,而采用根据访问路径 hash 的方法,基于ID负载均衡。
- 如果访问同一个路径,则必然得到同一个hash值,则必然访问到同一个tomcat进程。
- 这样就可以极大的利用tomcat的进程缓存。
- 当请求路由到此时,它优先查询本地缓存,本地缓存没有在查询redis缓存,redis缓存没有在去访问tomcat端口获得信息
第二级缓存即为redis缓存
- 为了避免项目刚启动时,因为reids缓存中无数据导致对mysql冲击较大,所以要进行redis缓存预热,将热点信息提前放到reids中,减少数据库的压力
- 实现 接口
InitializingBean及其内部定义的方法afterPropertiesSet() - 在设置键值对的时候, 键要加前缀,归位同一类,避免键冲突
item:id:10001item:stock:id:10001
第三级缓存即为tomcat进程缓存
- 借助
Caffeine框架实现进程缓存 - 各个进程间 缓存不共享
- 借助
缓存同步
- nginx本地缓存 的缓存同步策略为
- 设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新
- redis缓存和tomcat进程缓存 的缓存同步策略为
- **异步通知:**修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
- 使用
canal监听数据库变化,当数据发生变化时,自动修改缓存- 使用
canal做监听器,可以实现代码0侵入,只需要实现接口EntryHandler<Item>- 实现接口的三个方法
- 在实体类字段加上一些注解,来更好的与数据库建立联系
canal监听的原理与mysql的主从同步一致- 它伪装成一个slave,通过监听数据库master的
binary log,来实现实时的数据监听
- 它伪装成一个slave,通过监听数据库master的
- 使用
- 当然也可以使用 mq
- 使用
- **异步通知:**修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
- nginx本地缓存 的缓存同步策略为
上次更新: 2023 07 3
