【多级缓存】多级缓存OpenResty,Canal,nginx本地缓存

news2024/10/7 2:23:06

多级缓存

  • 安装OpenResty
  • OpenResty入门
    • OpenResty获取请求参数
    • OpenResty向tomcat服务器发送请求
  • 在nginx与tomcat端之间添加redis缓存
  • Redis本地缓存
  • 缓存同步
    • 缓存同步策略
    • 基于Canal的异步通知
      • 安装Canal
    • Canal客户端

安装OpenResty

OpenResty是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用Web 服务和动态网关。具备下列特点:

  1. 具备Nginx的完整功能
  2. 基于Lua语言进行扩展,集成了大量精良的Lua库,第三方模块
  3. 允许使用Lua自定义业务逻辑,自定义库

官方地址:https://openresty.org/cn/

  • 在linux下安装
  1. 安装OpenResty的依赖开发库
    yum install -y pcre-devel openssl-devel gcc --skip-broken
  2. 在centos中添加openresty仓库
    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
  3. 安装openResty
    yum install -y yum-utils
  4. 安装opm工具,是一个openresty的管理工具,可以帮助我们安装一个第三方的lua模块
    yum instally openrest -y -opm

默认情况下 openResty的安装目录是/usr/local/openresty
在这里插入图片描述
配置nginx环境变量
5. 打开配置文件vim /etc/profile
6. 在最下面添加
export NGINX_HOME=/usr/local/openresty/nginx
export PATH=${NGINX_HOME}/sbin:$PATH
7. 让配置生效
source /etc/profile
8. 启动nginx

# 启动nginx
nginx
# 重新加载配置
nginx -s reload
# 停止
nginx -s stop

在这里插入图片描述

OpenResty入门

这里由代理一个访问路径为例子:
在windows端的nginx中进行

  1. 在nginx.conf的http下面,添加对OpenResty的Lua模块的加载:
    在这里插入图片描述

  2. 在nginx.conf的server下面,添加对/api/item这个路径的监听:
    在这里插入图片描述

  3. Linux中niginx目录下创建lua文件夹,新建item.lua文件
    创建内容:
    在这里插入图片描述

  4. 重新加载配置
    nginx -s reload

OpenResty获取请求参数

OpenResty提供了各种API用来获取不同类型的参数:
在这里插入图片描述

OpenResty向tomcat服务器发送请求

nginx提供了内部API请求用以发送http请求:
在这里插入图片描述
返回的响应内容包括:
resp.status:响应状态码
resp.header:响应头,是一个table
resp.body:响应体,就是响应数据

注意:这里的path是路径,并不包含IP和端口,这个请求会被nginx内部的server监听并处理,可以使用反向代理
在这里插入图片描述

我们可以把http查询的请求封装到一个函数中,放到OpenResty函数库中,方便以后使用

  1. 创建文件/usr/local/openresty/lualib/common.lua
  2. 在文件中封装请求http查询的函数
    在这里插入图片描述
    如何使用这个封装函数,返回向tomcat请求的数据,在item.lua文件中
    在这里插入图片描述

注意:Openresty提供了一个cjson的模块用来处理JSON的序列化和反序列化
地址:https://github.com/openresty/lua-cjson/
如何使用:

  1. 引入json模块
    local cjson=require "cjson"
  2. 序列化:
    在这里插入图片描述
    反序列化:
    在这里插入图片描述

在nginx与tomcat端之间添加redis缓存

  • 冷启动和缓存预热

冷启动:服务刚刚启动时,Redis中并没有缓存,如果所有商品数据都在第一次查询时添加缓存,可能会给数据库带来较大压力。
缓存预热:在实际开发中,我们可以利用大数据统计用户访问的热点数据,在项目启动时将这些热点数据提前查询并保存到Redis中。

OpenResty提供了操作Redis的模块,只需要引入就能够使用
在这里插入图片描述
封装函数,用来释放Redis连接,放入连接池
在这里插入图片描述
封装函数,从Redis中读取数据并返回
在这里插入图片描述

Redis本地缓存

OpenResty为nginx提供了shard dict的功能,可以在nginx的多个worker之间共享数据,实现缓存功能

  1. 开启共享词典,在nginx.conf的http下添加配置:

在这里插入图片描述
2. 操作共享词典
在这里插入图片描述

缓存同步

缓存同步策略

设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新
优势:简单、方便
缺点:时效性差,缓存过期之前可能不一致
场景:更新频率较低,时效性要求低的业务
同步双写:在修改数据库的同时,直接修改缓存
优势:时效性强,缓存与数据库强一致
缺点:有代码侵入,耦合度高;
场景:对一致性、时效性要求较高的缓存数据
异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
优势:低耦合,可以同时通知多个缓存服务
缺点:时效性一般,可能存在中间不一致状态
场景:时效性要求一般,有多个服务需要同步

基于Canal的异步通知

在这里插入图片描述

安装Canal

Canal是阿里巴巴旗下的开源项目,基于java开发,基于数据库增量日志解析,提供增量数据订阅&消费
地址:https://github.com/alibaba/canal

Canal是基于MySQL的主从同步来实现的,MySQL主从同步的原理如下:
在这里插入图片描述
MySOL master将数据变更写入二进制日志( binarylog)其中记录的数据叫binary log events
MySQLslave 将master的 binary log events拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

Canal就是把自己伪装成MVSOL的一个slave节点,从而监听master的binarylog变化。再把得到的变化信息通知给Canal的客户端,进而完成对其它数据库的同步。

安装:

  1. 首先创建一个网络,将MySQL,Canal,MQ放在同一个Docker网络中:
    docker network create hhh
    让mysql加入这个网络
    docker network connect hhh mysql

  2. 将Canal镜像上传到虚拟机中,通过命令导入;
    docker load -i canal.tar

  3. 运行创建Canal容器
    docker run p 11111:11111 --name canal
    -e canal.destinations=hhh
    -e canal.instance.master.address=mysql:3306
    -e canal.instance.dbUsername=canal
    -e canal.instance.dbPassword=canal
    -e canal.instance.connectionCharset=UTF-8
    -e canal.instance.tsdb.enable=true
    -e canal.instance.gtidon=false
    -e canal.instance.filter.regex=hhh\…*
    –network hhh
    -d canal/canal-server:v1.1.5

Canal客户端

Canal提供了各种语言的客户端,当Canal监听到binlog变化时,会通知Canal的客户端。
第三方开源的canal-starter:地址:https://github.com/NormanGyllenhaal/canal-client

  1. 引入依赖

在这里插入图片描述
2. 编写配置

canal:
    destination: hhh #要跟canal运行时设置的destination一致
    server: 192.168.75.135:11111 #canal地址
  1. 编写监听器,监听canal消息
//Item是指定表的实体类
@CanalTable("表名")
@Component
public class ItemHandler implements EntryHandler<Item>{
   @Override
   public void insert(Item item){
   //新增数据到redis中
   //新增数据到JVM缓存
   }
   @Override
   public void update(Item before,Item after){
   //更新redis数据
   //更新本地缓存
   //更新数据到JVM缓存
   }
   @Override
   public void delete(Item item){
   //删除redis数据
   //清除本地缓存
   //从JVM中删除缓存
   }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[iOS]使用CocoaPods发布私有库

1.创建私有 Spec 仓库 首先&#xff0c;需要一个私有的 Git 仓库来存放你的 Podspec 文件&#xff0c;这个仓库用于索引你所有的私有 Pods。 在 GitHub 或其他 Git 服务上创建一个新的私有仓库&#xff0c;例如&#xff0c;名为 PrivatePodSpecs。克隆这个仓库到本地&#xf…

使用STM32CubeMX对STM32F4进行串口配置

目录 1. 配置1.1 Pin脚1.2 RCC开启外部晶振1.3 时钟1.4 串口配置 2. 代码2.1 默认生成代码2.1 开启串口中断函数2.3 接收中断2.4 接收回调函数2.5 增加Printf 的使用 1. 配置 1.1 Pin脚 1.2 RCC开启外部晶振 1.3 时钟 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高…

机器学习:深入解析SVM的核心概念(问题与解答篇)【四、软间隔与正则化】

软间隔与正则化 问题一&#xff1a;优化目标函数是如何得到的&#xff1f;得到的过程是怎样的&#xff1f;问题二&#xff1a;拉格朗日乘子法计算详细过程问题三&#xff1a;KKT条件求解过程问题四&#xff1a;结构风险最小化&#xff08;SRM&#xff09;的原理 在前面的讨论中…

针孔相机模型原理坐标系辨析内参标定流程内参变换

针孔相机的内参标定 针孔相机原理真空相机模型图片的伸缩和裁剪变换 内参标定———非线性优化张正定标定详细原理(含公式推导)通过多张棋盘格照片完成相机的内参标定流程(C代码)其他工具箱 相机分为短焦镜头和长焦镜头&#xff0c;短焦镜头看到的视野更广阔&#xff0c;同样距…

全新突破:「Paraverse平行云」实现3D/XR企业级应用全面接入Apple Vision Pro

在前不久举行的GTC开发者大会上&#xff0c;英伟达引领行业风向&#xff0c;宣布其Omniverse平台能够助力企业将3D/XR应用流畅传输至Apple Vision Pro混合现实头显。在英伟达与苹果这两大科技巨头的合作下,此举标志着3D/XR技术迈向新纪元的关键一步。「Paraverse平行云」实时云…

JavaScript中的扩展操作符作用是什么,有什么含义?

在 JavaScript 中&#xff0c;扩展操作符允许一个表达式在某些地方展开成多个元素。这个特性在 ES2015 (也叫做 ES6) 中被引入到 JavaScript 语言中&#xff0c;并广泛用于数组和对象。在您的代码示例中&#xff0c;它被用于对象。 对象中的扩展操作符 在对象字面量中使用扩展…

【知识学习/复习】损失函数篇,包含理解应用与分类:回归、分类、排序、生成等任务

损失函数总结 一、损失函数理解二、不同任务的损失函数的应用1.图像分类2.目标检测3.语义分割4.自然语言处理&#xff08;NLP&#xff09;5.图神经网络&#xff08;GNN&#xff09;6.生成式网络 三、损失函数1. 回归任务损失函数常见损失函数IoU系列损失函数1. IoU损失函数&…

pyQt5 和 Qt Designer 实现登录注册案例

Qt Designer 设计页面: 通过 PyQt5 手写 1. 先引入用到的库 from PyQt5.QtWidgets import * import sys 2. 创建应用,窗口, 设置窗口 # 创建应用 app QApplication(sys.argv) # 创建窗口 w QWidget()# 设置窗口标题 w.setWindowTitle("注册登录")# 展示 w.sho…

ssm091校园自助洗衣系统的分析与设计+jsp

校园自助洗衣系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园洗衣信息管理混乱&#xff0c;出…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API&#xff0c;用于监测一个或多个目标元素与其祖先元素或视窗&#xff08;viewport&#xff09;之间的交叉状态&#xff08;intersection&#xff09;的变化。它可以有效地监听元素是否进入或离开可视区域&#xff0c;从而实现…

Dokcer容器分布式搭建LNMP+wordpress论坛

目录 引言 一、架构环境 二、搭建容器 &#xff08;一&#xff09;自定义网络 &#xff08;二&#xff09;搭建nginx容器 1.文件准备 2.查看与编辑文件 3.生成镜像 4.创建容器 &#xff08;三&#xff09;搭建MySQL容器 1.文件准备 2.查看与编辑文件 3.生成镜像 …

2013NOIP普及组真题 4. 车站分级

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1964 核心思想&#xff1a; 1、原文中提到 “如果这趟车次停靠了火车站 x&#xff0c;则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠”&#xff0c;如果设停靠站为A&…

汽车信息安全入门总结(2)

目录 1.引入 2.汽车信息安全技术 3.密码学基础知识 4.小结 1.引入 上篇汽车信息安全入门总结(1)-CSDN博客主要讲述了汽车信息安全应该关注的点&#xff0c;以及相关法规和标准&#xff0c;限于篇幅&#xff0c;继续聊信息安全相关技术以及需要掌握的密码学基础知识。 2.汽…

SpringCloud学习笔记(一)微服务介绍、服务拆分和RestTemplate远程调用、Eureka注册中心

文章目录 1 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务1.4 SpringCloud1.5 总结 2 服务拆分与远程调用2.1 服务拆分原则2.2 服务拆分示例2.2.1 搭建项目2.2.2 创建数据库和表2.2.3 实现远程调用2.2.3.1 需求描述2.2.3.2 注册RestTemplate2.2.3.3 实现远程调用 2.2.4 提供…

Aiseesoft Data Recovery for Mac:专业数据恢复软件

Aiseesoft Data Recovery for Mac是一款高效且专业的数据恢复软件&#xff0c;专为Mac用户量身打造。 Aiseesoft Data Recovery for Mac v1.8.22激活版下载 无论是由于误删、格式化还是系统崩溃等原因导致的数据丢失&#xff0c;Aiseesoft都能帮助您快速找回。 它采用先进的扫描…

【计算机毕业设计】基于SSM++jsp的社区管理与服务系统【源码+lw+部署文档+讲解】

目录 摘 要 Abstract 第一章 绪论 第二章 系统关键技术 第三章 系统分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3运行可行性 3.1.4法律可行性 3.4.1注册流程 3.4.2登录流程 3.4.3活动报名流程 第四章 系统设计 4.3.1登录模块顺序图 4.3.2添加信息模块顺序图 4.4.1 数据库E-…

SpringCloud系列(21)--更换Ribbon的负载均衡模式

前言&#xff1a;在上一篇文章中我们介绍了关于Ribbon的知识点已经如果去应用Ribbon&#xff0c;而本章节内容则是关于如何去切换Ribbon的负载均衡模式。 以下是上篇文章的部分内容&#xff0c;可以再看下熟悉下&#xff0c;方便后续理解 Ribbon工作架构图 Ribbon的负载均衡模式…

C# winform 漂亮的日期时间控件

源代码下载&#xff1a; https://download.csdn.net/download/gaoxiang19820514/89242240 效果图 在 HZH-Controls控件 基础上修改的日期控件 因为HZH_Controls控件 中的日期控件太大了&#xff0c; 我的程序中需要多个日期时间的控件放不下&#xff0c;主题是绿色的&#…

pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx 文件读取漏洞复现

0x01 产品简介 pkpmbs 建设工程质量监督系统是湖南建研信息技术股份有限公司一个与工程质量检测管理系统相结合的,B/S架构的检测信息监管系统。 0x02 漏洞概述 pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx接口处存在文件读取漏洞,未经身份认证的攻击者可以利用漏洞读…

使用 Docker 自建一款怀旧游戏之 - 扫雷

1&#xff09;扫雷 简介 扫雷 是一种经典的单人电脑游戏&#xff0c;最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块&#xff0c;而不触发地雷。每个方块上都标有数字&#xff0c;表示周围 8 个方块中…