官方网站制作公司/网站seo运营培训机构
CommandLineRunner接口的run方法
什么是多级缓存?
多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Server端的压力,提升服务性能。
一级缓存:1.CDN:内容分发网络
二级缓存:2.NGINX+Lua脚本+OpenResty服务器 负载均衡反向代理【静态和转发】
三级缓存:JVM进程缓存【本地缓存Caffeine】
四级缓存:Redis缓存
五级缓存:Mysql集群+主从复制
Mysql
现在是Caffeine===》(程序)====》Redis===》(cannel 阿里现成的工具 监听mysql)===》Mysql
那这个程序怎么实现对redis的监听?
没有什么是加一层不能解决的【公共管理层】。
亮点+难点
1.自定义本地缓存初始化配置-咖啡因【CommandLineRunner】
2.自定义缓存控制器,用来制衡远程redis缓存和本地缓存localCacheCaffeine【这个就是所谓的公共管理层】
3.远程redis监听程序 健康度检查
4.断线重连
数据同步策略?
高可用+分布式数据最终一致性回答思路。
多种策略共存
1.设置有效期【缓存击穿】
给缓存设置有效期,到期后自动删除,再次查询后更新。
对数据的即时性没有严格要求的应用场景,如一些只需要每天更新一次的报告数据。
优点:简单方便
缺点:时效性差,缓存过期之前可能不一致。
场景:更新频率低,时效性要求低的场景
2.同步双写
在修改数据库的同时,直接修改缓存
优点:时效性强,缓存与数据库强一致
缺点:有代码侵入,耦合度高
场景:对一致性、时效性要求较高的缓存数据
3.异步通知
修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据。
优势:低耦合,可以同时通知多个缓存服务
缺点:时效性一半,可能存在中间不一致状态
场景:时效性要求一般,有多个服务需要同步
1.基于MQ消息
2.基于Canal的通知
3.自己写中间件
这个业务库后面再加一层DTS,然后通过监听实时分发给下游消费,不然直接在业务库监听,大批量物理操作或者敏感数据链路可以在新的DTS处理,这样相当于把业务彻底隔离开。
在数据库和其他系统组件之间增加一个中间层来处理数据同步。这个中间层可以实时监听数据库变更,并将这些变更分发给下游的消费者(如缓存服务)。这样做的好处包括:
- 隔离业务逻辑和数据同步逻辑:保证业务数据库的操作不受缓存同步逻辑的影响,以此提高业务数据库的性能和稳定性。
- 处理大批量操作:对于大批量的数据库操作,可以在DTS层进行处理,避免直接在业务数据库上产生大量负载。
- 处理敏感数据:对于敏感数据,可以在DTS层进行必要的数据筛选和脱敏处理,然后再分发到下游。
将业务逻辑和数据同步逻辑隔离开,可以让系统的各个部分更加专注于它们自己的职责,提高系统的可维护性和扩展性。同时,这种架构设计还可以增强系统对高并发和高可用性的支持。
背景
假设你有一个在线电商平台,该平台的用户可以浏览商品、下订单、写评论等。这个平台的后端使用一个MySQL数据库来存储所有的业务数据,比如用户信息、商品信息、订单记录等。
场景
随着电商平台的快速增长,你发现以下问题:
- 高峰时段,大量用户下单导致数据库写入操作频繁,影响了数据库的性能。
- 你想实现一个实时推荐系统,该系统需要基于用户的最新交互数据来更新推荐内容。
- 为了提升性能,你决定使用缓存服务来减少数据库的读取压力。
问题
直接在业务数据库上实现这些功能会有以下问题:
- 数据库可能会因为处理大量的同步、读写操作而成为性能瓶颈。
- 如果直接在业务库上监听数据变更,任何监听过程中的延迟或错误都可能直接影响到主业务的稳定性和性能。
DTS层的引入
为了解决上述问题,你决定引入一个DTS层;这个DTS层可以理解为一个中间件或服务平台,它的角色如下:
- 数据同步:DTS层监听业务数据库的变更(例如使用Binlog监听MySQL的变更)。当有新的订单产生时,DTS层捕获这个变更事件。
- 数据分发:DTS层将捕获的事件发送给其他感兴趣的系统或服务,比如缓存更新服务、搜索索引服务、实时推荐系统等。
- 数据处理:在分发之前,DTS层可以对数据进行必要的加工处理,例如数据清洗、转换格式、脱敏等。
例子
- 订单服务:当用户下单时,订单服务将订单信息写入数据库。
- DTS层捕获变更:DTS层监听到订单表有新的记录,它捕获了这个变更事件。
- 实时推荐系统更新:DTS层将订单信息发送给实时推荐系统,该系统根据新的订单更新用户的推荐列表。
- 缓存服务同步:DTS层同时通知缓存服务,让其更新相关的用户信息缓存,以确保其他用户看到的是最新的订单信息。
好处
- 业务逻辑与数据同步解耦:业务数据库只需关注数据的存储和业务逻辑处理,而DTS层负责数据的同步和分发,避免了直接在业务库上额外增加处理负担。
- 提高性能:DTS层可以批量处理和优化数据同步过程,减轻业务数据库的压力。
- 增强安全性和隐私:DTS层可以对敏感数据进行脱敏处理,确保在传输过程中不泄露用户隐私。
- 灵活性:可以根据需要为不同的下游系统定制数据分发和处理逻辑。
通过引入DTS层,电商平台的架构变得更加健壮和可扩展,能够更好地应对高并发场景,并为用户提供更加快速和个性化的服务。
设计多级缓存【如果redis数据量特别大 就不适合咖啡因了】
我们将进程内缓存与分布式缓存服务,结合有效分摊应用压力。在java应用层面,只有本地缓存Caffeine的缓存不存在时,再去redis分布式缓存获取,如果Redis也没有此数据再去数据库查询。数据查询成功后,对redis与Caffeine同时进行双写更新。这样java应用下一次再查询相同数据时,直接从本地Caffeine缓存获取,不再产生新的网络通信,应用查询性能得到显著提高。
1.先调用set
相关文章:

四级缓存实现
CommandLineRunner接口的run方法 什么是多级缓存? 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Server端的压力,提升服务性能。 一级缓存:1.CDN:内容分发网络 二级缓存:2.NGINX+Lua脚本+OpenResty服务器 负载均衡反向代理【静态和转发】 三级缓存:J…...

程序员如何规划职业赛道?
在快速发展的信息技术时代,程序员作为数字世界的构建者,面临着前所未有的职业选择和发展机会。选择合适的职业赛道,不仅关乎个人职业发展的高度和速度,更影响着个人职业生涯的满意度和幸福感。本文将从自我评估与兴趣探索、市场需…...

蓝桥杯day3刷题日记--P9240 冶炼金属
P9240 [蓝桥杯 2023 省 B] 冶炼金属 经典二分,先在第一组中找到最小值,在利用最小值限制范围寻找最大值 #include <iostream> #include <algorithm> using namespace std; int n,kk; int m[10001],num[10001]; int maxs,mins;bool check1…...

Mybatis-xml映射文件与动态SQL
xml映射文件 动态SQL <where><if test"name!null">name like concat(%,#{name},%)</if><if test"username!null">and username#{username}</if></where> <!-- collection:遍历的集合--> <!-- …...

MySQL_数据库图形化界面软件_00000_00001
目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址: 英文:https://www.navicat.com 中文:https://www.navicat.com.cn SQLyog 官网地址: 英文:https://webyog.com DBeaver 官网地址&…...

流媒体学习之路(WebRTC)——FEC逻辑分析(6)
流媒体学习之路(WebRTC)——FEC逻辑分析(6) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全…...

command failed: npm install --loglevel error --legacy-peer-deps
在使用vue create xxx创建vue3项目的时候报错。 解决方法,之前使用的https://registry.npm.taobao.org 证书过期更换镜像地址即可 操作如下: 1.cd ~2.执行rm .npmrc3. sudo npm install -g cnpm --registryhttp://registry.npmmirror.com…...

KubeSphere集群安装-nfs分布式文件共享-对接Harbor-对接阿里云镜像仓库-遇到踩坑记录
KubeSphere安装和使用集群版 官网:https://www.kubesphere.io/zh/ 使用 KubeKey 内置 HAproxy 创建高可用集群:https://www.kubesphere.io/zh/docs/v3.3/installing-on-linux/high-availability-configurations/internal-ha-configuration/ 特别注意 安装前注意必须把当前使…...

Epuck2机器人固件更新及IP查询
文章目录 前言一、下载固件更新软件包:二、查询机器人在局域网下的IP 前言 前面进行了多机器人编队仿真包括集中式和分布式,最近打算在实物机器人上跑一跑之前的编队算法。但由于Epuck2机器人长时间没使用,故对其进行固件的更新,…...

C goto 语句
C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语…...

【排序算法】-- 深入理解桶排序算法
概述 在计算机科学中,排序算法是一种对数据进行有序排列的重要技术。桶排序(Bucket Sort)是一种常见的排序算法,它通过将数据分到有限数量的桶中,并对每个桶中的数据分别排序,最后按照顺序将所有桶中的数据…...

【Linux】Ubuntu使用Netplan配置静态/动态IP
1、说明 Ubuntu 18.04开始,Ubuntu和Debian移除了以前的ifup/ifdown命令和/etc/network/interfaces配置文件,转而使用ip link set或者/etc/netplan/01-netcfg.yaml模板和sudo netplan apply命令实现网络管理。 Netplan 是抽象网络配置描述器,用于配置Linux网络。 通过netpla…...

chatGLM3+chatchat实现本地知识库
背景 由于客服存在大量的问题为FAQ问题,需要精准回复客户,所以针对此类精准问题,通过自建同量数量库进行回复。 落地方案 通过chatGLM3-6Blangchain-chatchatbge-large-zh实现本地知识库库。 注意:相关介绍和说明请看官网~ 配置要…...

webpack5零基础入门-11处理html资源
1.目的 主要是为了自动引入打包后的js与css资源,避免手动引入 2.安装相关包 npm install --save-dev html-webpack-plugin 3.引入插件 const HtmlWebpackPlugin require(html-webpack-plugin); 4.添加插件(通过new方法调用) /**插件 *…...

el-input设置max、min无效的解决方案
目录 一、方式1:type“number” 二、方式2:oninput(推荐) 三、计算属性 如下表所示,下面为官方关于max,min的介绍: el-input: max原生属性,设置最大值min原生属性&a…...

C语言经典面试题目(十八)
1、如何在C语言中实现堆排序算法? 堆排序是一种利用堆数据结构进行排序的算法。它的基本思想是首先将待排序的数组构建成一个最大堆(或最小堆),然后逐步将堆顶元素与堆中最后一个元素交换,并重新调整堆,使…...

[数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5422 标注数量(xml文件个数):5422 标注数量(txt文件个数):5422 标注…...

Flask vs. Django:选择适合你的Web开发框架【第134篇—Flask vs. Django】
👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask vs. Django:选择适合你的Web开发框架 在选择一个适合你项目的Web开发框架…...

你能解释一下Spring AOP(面向切面编程)的概念和用法吗?在Spring中,如何使用事务管理?
你能解释一下Spring AOP(面向切面编程)的概念和用法吗? Spring AOP(面向切面编程)是Spring框架中一个非常重要的功能模块,它允许开发者通过预编译方式和运行期动态代理来实现程序功能的统一维护。AOP并不是…...

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解
时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CEEMDAN方法的分解效果取决于白噪声幅值权重(Nstd)和噪声添…...

Spring Boot(七十):利用Jasypt对数据库连接进行加密
1 Jasypt简介 Jasypt(Java Simplified Encryption)是一个专注于简化Java加密操作的工具。它提供了一种简单而强大的方式来处理数据的加密和解密,使开发者能够轻松地保护应用程序中的敏感信息,如数据库密码、API密钥等。 Jasypt的设计理念是简化加密操作,使其对开发者更加…...

Mysql设计规范
主键推荐默认用递增字符串大小合理设置数据库默认字段: 主键、创建人、创建时间、修改人、修改时间、逻辑删除(可选)、乐观锁(可选)冗余字段: 严禁冗余变更字段;例如: 创建人名称,租…...

Vue3项目部署安装
Vue3ts部署 查看官网安装项目vue3的命令(四个)其中有: yarn create vuelatest 我执行时遇到报错,可能是我yarn版本不是最新 的问题, 改用这个命令去掉latest即可 yarn create vue 新项目先要安装yarn依赖,才能yarn …...
Oracle P6 Professional 配置连接数据库总结
前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一,其操作出色,体检佳,是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前,Professional一直在不断的演变更新,以适应当前的新技术,从…...

WPF —— Grid网格布局
1 :Grid网格布局简介 Grid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。 2:网格标签Grid.ColumnDef Grid.ColumnDefinitions自定义列 只能设置宽度 不能设置高度ColumnDefinition 每一个列可以设置宽度,…...

爬虫的去重
去重基本原理 爬虫中什么业务需要使用去重 防止发出重复的请求防止存储重复的数据 在爬取网页数据时,避免对同一URL发起重复的请求,这样可以减少不必要的网络流量和服务器压力,提高爬虫的效率,在将爬取到的数据存储到数据库或其…...

elementUI两个select单选框联动
实现需求:两个单选框内容两栋,在选择第一个时,第二个选框能自动更新对应选项。且在切换第一个选项内容时,第二个选框会被清空且切换到新的对应选项。 设置值班班次和备班情况两个选项 ,完整代码如下: <…...

十四、GPT
在GPT-1之前,传统的 NLP 模型往往使用大量的数据对有监督的模型进行任务相关的模型训练,但是这种有监督学习的任务存在两个缺点:预训练语言模型之GPT 需要大量的标注数据,高质量的标注数据往往很难获得,因为在很多任务…...

五款优秀的FTP工具
一、WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。.winscp也可以链接其他系统,比如linux系统。 官网:https://winscp.net/ 二、FileZilla FileZilla是一个免费开源的…...

十八、软考-系统架构设计师笔记-真题解析-2022年真题
软考-系统架构设计师-2022年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.云计算服务体系结构如下图所示,图中①、②、③分别与SaaS、PaaS、IaaS相对应,图中①、②、③应为( )。 A.应用层、基础设施层、平台层 B.应用层、平台层、基础设施层 C.平…...