多级缓存(亿级并发解决方案)
多级缓存(亿级流量(并发)的缓存方案)
传统缓存的问题
传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下:
(1)请求要经过tomcat处理,tomcat成为整个系统的瓶颈。
(2)redis缓存失效时,会对数据库产生冲击。(缓存雪崩等各个问题)
tomcat本身的缓存(并发)能力是不如redis的。

多级缓存
(1)多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻tomcat压力,提升服务性能。
静态资源请求存入到浏览器客户端缓存,非静态数据进入到nginx服务器(此时的nginx为nginx的本地缓存,可编程将查询数据去访问redis中,不去请求tomcat),可将数据存入到业务nginx中。redis缓存未命中时,到达tomcat中可读取进程缓存来获得数据。tomcat进程缓存未命中,就到达
数据库。
(2)redis缓存失效时,(发生缓存雪崩等)可以使用tomcat进程(也称jvm进程缓存)缓存做缓冲,从而避免了全部访问数据库。
(3)业务nginx内部需要编写对redis的访问和对tomcat进程缓存的访问。
(4)业务nginx通常作为集群的形式

jvm进程缓存
使用lua语言编写业务nginx的逻辑
缓存同步策略
缓存数据同步的常见方式
(1)设置有效期:给缓存设置有效期,到期后自动删除。再次查询时更新。
缺点:时效性差,缓存过期前可能不一致
优点:简单、方便 ,适用于更新频率低,时效性要求低的业务
(2)同步双写:在修改数据库的同时,直接修改缓存
优势:时效性强,强一致性缺点:业务代码中有侵入代码(更新缓存操作),耦合度高;适用于对一致性和时效性较高的缓存数据。
(3)异步通知:修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
优点:低耦合,可以同时通知多个缓存服务
缺点:时效性一般(其实也就够了,mq收到消息之间只是ms级别);适用于有多个服务需要同步。
<1> 基于mq的异步通知(仍需要在代码中进行操作mq)

<2> 基于Canal的异步通知(通过监听数据库的变化)

canal监听原理
canal把自己伪装成mysql的一个slave节点,从而监听master的binary log变化,再把得到的变化信息通知给Canal的客户端,从而完成对其他数据库的同步。


项目(在默认tomcat容器中)编写监听Canal客户端
引入依赖

编写配置:
canal:destination:test # canal实例名称,要跟canal-server运行时设置的destination一致。server:安装ip:端口号 # canal地址
编写监听器
实现EntryiHandler接口,重写方法(监听到数据库的新增、修改、删除会执行对应的方法)

编写指定的实体类Item(表和实体类之间的映射关系)
@Id : 声明表的逐渐
@Transient: 表示不是当前表的字段
@Column:当数据库和实体类字段名称不一致时编写

相关文章:
多级缓存(亿级并发解决方案)
多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…...
代理模式 - 代理模式的应用
引言 代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用,从而可以在不改变目标对象的情况下,增加额外的功能或控…...
编辑器Vim基本模式和指令 --【Linux基础开发工具】
文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...
云计算如何与物联网(IoT)结合?
今天我们来聊一个既酷炫又实用的话题:云计算如何给物联网插上腾飞的翅膀。 智能时代的技术密码 想象一下,你家的冰箱会自动帮你订购即将用完的牛奶,工厂的机器能预测何时需要维修,城市的路灯会根据实时交通流量调整亮度。这些看…...
C#面试常考随笔4:int? 和 int的区别,以及int?的运用场景?
可空性 int?:它是int的可空类型,允许将null赋值给该变量。int?实际上是Nullable<int>的缩写形式,是一个可以为null的整数类型。例如:int? num2 null;或者int? num3 10;都是合法的。 内存分配与存储 int?ÿ…...
DeepSeek-R1试用
最近DeepSeek太火了,对配置要求不高。刚好放假,下载试试。发现开源大模型的生态做的挺好的,几分钟就能在本地部署一个大模型。 配置 NVIDIA RTX 2060 6GB(最低要求 NVIDIA GTX 1060 6GB ) 下载Ollama Ollama是一个…...
Vue 3 30天精进之旅:Day 06 - 表单输入绑定
引言 在前几天的学习中,我们探讨了事件处理的基本概念及其在Vue中的应用。今天,我们将进一步了解Vue的表单输入绑定。这是构建用户交互式应用的核心部分,使得我们能够方便地处理用户输入并实时更新数据。本文将介绍如何在Vue中实现单向和双向…...
[创业之路-269]:《创业讨论会》- 系统之韵:从麻雀到5G系统的共通性探索
关键词: 从系统的角度,麻雀、人体系统、企业系统、软硬件系统、软件系统、通信系统、5G系统是类似的: 都有:内在看不见的规律、外在显性各种现象 都是:输入、处理、输出 都是:静态、要素、组成、结构、组织…...
使用C#对指定的MYSQL数据库进行备份以及常见问题
最近在开发过程中,需要做个MYSQL数据库的备份,大致总结了一下代码,以及常见的坑 string bakName "database" DateTime.Now.ToString("yyyyMMddHHmmss") ".sql";//备份后的数据库文件名var bakupFilePath &q…...
探索人工智能在计算机视觉领域的创新应用与挑战
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,人工智能(Artificial Intelligence, AI)已然成为引领新一轮科技革命和产业变革的重要驱动力。作为 AI 领域的关键分支,计算机视觉(Computer Vision, CV࿰…...
Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)
概述 在现代互联网应用中,网络请求和响应是服务交互的核心。对于开发者和测试人员来说,能够准确捕获并分析这些请求,是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具,不仅可以捕获普通的HTTP请求,还…...
STM32 对射式红外传感器配置
这次用的是STM32F103的开发板(这里面的exti.c文件没有how to use this driver 配置说明) 对射式红外传感器 由一个红外发光二极管和NPN光电三极管组成,M3固定安装孔,有输出状态指示灯,输出高电平灯灭,输出…...
12 款开源OCR发 PDF 识别框架
2024 年 12 款开源文档解析框架的选型对比评测:PDF解析、OCR识别功能解读、应用场景分析及优缺点比较 这是该系列的第二篇文章,聚焦于智能文档处理(特别是 PDF 解析)。无论是在模型预训练的数据收集阶段,还是基于 RAG…...
危机13小时:追踪一场GitHub投毒事件
事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…...
CVE-2020-0796永恒之蓝2.0(漏洞复现)
目录 前言 产生原因 影响范围 漏洞复现 复现环境 复现步骤 防御措施 总结 前言 在网络安全的战场上,漏洞一直是攻防双方关注的焦点。CVE-2020-0796,这个被称为 “永恒之蓝 2.0” 的漏洞,一度引起了广泛的关注与担忧。它究竟是怎样的…...
游戏策划的分类
P3游戏策划分类 1.程序2.美术3.策划 程序:一般分为客户端程序和服务器程序 客户端程序一般负责游戏的前端画面表现 服务器程序负责游戏的后端运算 美术:角色原画,角色模型动作,场景原画,场景模型,UI设计&a…...
单片机基础模块学习——PCF8591芯片
一、A/D、D/A模块 A——Analog 模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital 数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号) 下面…...
深入探索 HTML5 拖拽效果 API:打造流畅交互体验
在现代的 Web 开发中,交互性和用户体验一直是开发者关注的重点。HTML5 的拖拽效果 API (Drag and Drop API) 提供了一种非常直观的方式来让网页元素或文件能够被拖动并放置到页面的指定位置,极大提升了用户的交互体验。本篇文章将深入探讨如何使用 HTML5…...
【Healpix】python一种用于将球面划分为均匀区域的技术
Healpix 1、简介2、Healpix的基本原理3、Healpix的优点4、安装及使用4.1 安装healpy4.2 创建Healpix地图4.3 读取和写入Healpix数据4.4 数据插值 5、案例5.1 案例一:宇宙微波背景辐射(CMB)分析5.2 案例二:星系分布分析5.3 案例三&…...
Go:基于Go实现一个压测工具
文章目录 写在前面整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理 客户端模块Http客户端处理Grpc客户端处理Websocket客户端处理 连接处理模块GrpcHttp 统计数据模块统计原理实现过程 写在前面 本篇主要是基于Go来实现一个压测的工具,关于压测的内…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
