当前位置: 首页 > news >正文

四级缓存实现

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数据库来存储所有的业务数据,比如用户信息、商品信息、订单记录等。

场景

随着电商平台的快速增长,你发现以下问题:

  1. 高峰时段,大量用户下单导致数据库写入操作频繁,影响了数据库的性能。
  2. 你想实现一个实时推荐系统,该系统需要基于用户的最新交互数据来更新推荐内容。
  3. 为了提升性能,你决定使用缓存服务来减少数据库的读取压力。

问题

直接在业务数据库上实现这些功能会有以下问题:

  • 数据库可能会因为处理大量的同步、读写操作而成为性能瓶颈。
  • 如果直接在业务库上监听数据变更,任何监听过程中的延迟或错误都可能直接影响到主业务的稳定性和性能。

DTS层的引入

为了解决上述问题,你决定引入一个DTS层;这个DTS层可以理解为一个中间件或服务平台,它的角色如下:

  • 数据同步:DTS层监听业务数据库的变更(例如使用Binlog监听MySQL的变更)。当有新的订单产生时,DTS层捕获这个变更事件。
  • 数据分发:DTS层将捕获的事件发送给其他感兴趣的系统或服务,比如缓存更新服务、搜索索引服务、实时推荐系统等。
  • 数据处理:在分发之前,DTS层可以对数据进行必要的加工处理,例如数据清洗、转换格式、脱敏等。

例子

  1. 订单服务:当用户下单时,订单服务将订单信息写入数据库。
  2. DTS层捕获变更:DTS层监听到订单表有新的记录,它捕获了这个变更事件。
  3. 实时推荐系统更新:DTS层将订单信息发送给实时推荐系统,该系统根据新的订单更新用户的推荐列表。
  4. 缓存服务同步: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] 冶炼金属 经典二分&#xff0c;先在第一组中找到最小值&#xff0c;在利用最小值限制范围寻找最大值 #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&#xff1a;遍历的集合--> <!-- …...

MySQL_数据库图形化界面软件_00000_00001

目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址&#xff1a; 英文&#xff1a;https://www.navicat.com 中文&#xff1a;https://www.navicat.com.cn SQLyog 官网地址&#xff1a; 英文&#xff1a;https://webyog.com DBeaver 官网地址&…...

流媒体学习之路(WebRTC)——FEC逻辑分析(6)

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

command failed: npm install --loglevel error --legacy-peer-deps

在使用vue create xxx创建vue3项目的时候报错。 解决方法&#xff0c;之前使用的https://registry.npm.taobao.org 证书过期更换镜像地址即可 操作如下&#xff1a; 1.cd &#xff5e;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查询

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

C goto 语句

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

【排序算法】-- 深入理解桶排序算法

概述 在计算机科学中&#xff0c;排序算法是一种对数据进行有序排列的重要技术。桶排序&#xff08;Bucket Sort&#xff09;是一种常见的排序算法&#xff0c;它通过将数据分到有限数量的桶中&#xff0c;并对每个桶中的数据分别排序&#xff0c;最后按照顺序将所有桶中的数据…...

【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问题&#xff0c;需要精准回复客户&#xff0c;所以针对此类精准问题&#xff0c;通过自建同量数量库进行回复。 落地方案 通过chatGLM3-6Blangchain-chatchatbge-large-zh实现本地知识库库。 注意&#xff1a;相关介绍和说明请看官网~ 配置要…...

webpack5零基础入门-11处理html资源

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

el-input设置max、min无效的解决方案

目录 一、方式1&#xff1a;type“number” 二、方式2&#xff1a;oninput&#xff08;推荐&#xff09; 三、计算属性 如下表所示&#xff0c;下面为官方关于max&#xff0c;min的介绍&#xff1a; el-input&#xff1a; max原生属性&#xff0c;设置最大值min原生属性&a…...

C语言经典面试题目(十八)

1、如何在C语言中实现堆排序算法&#xff1f; 堆排序是一种利用堆数据结构进行排序的算法。它的基本思想是首先将待排序的数组构建成一个最大堆&#xff08;或最小堆&#xff09;&#xff0c;然后逐步将堆顶元素与堆中最后一个元素交换&#xff0c;并重新调整堆&#xff0c;使…...

[数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5422 标注数量(xml文件个数)&#xff1a;5422 标注数量(txt文件个数)&#xff1a;5422 标注…...

Flask vs. Django:选择适合你的Web开发框架【第134篇—Flask vs. Django】

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

你能解释一下Spring AOP(面向切面编程)的概念和用法吗?在Spring中,如何使用事务管理?

你能解释一下Spring AOP&#xff08;面向切面编程&#xff09;的概念和用法吗&#xff1f; Spring AOP&#xff08;面向切面编程&#xff09;是Spring框架中一个非常重要的功能模块&#xff0c;它允许开发者通过预编译方式和运行期动态代理来实现程序功能的统一维护。AOP并不是…...

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解

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

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...