Spring Boot02(数据库、Redis)02---java八股

MySQL和Redis的区别?

1. 数据类型
MySQL是一种关系型数据库
,表结构化存储,使用 SQL 查询。支持表、列、行等结构化数据。
Redis是一种基于内存的缓存系统,支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。

2. 存储方式
MySQL则将数据存储在磁盘上,读写速度相对较慢,但可以存储更大的数据量。
Redis将所有数据存储在内存中,因此读写速度非常快。
3. 访问模式:
MySQL则使用多线程模型,可以同时处理多个请求。
Redis是单线程模型,所有请求都在一个线程中依次执行,因此可以获得更高的并发性能。
4. 持久化支持:
MySQL提供了多种持久化方式,如InnoDB引擎的redo log和binlog等。
Redis提供了多种持久化方式,如RDB(快照)和 AOF(追加日志)两种持久化方式等。
5.数据一致性
MySQL支持 ACID 事务,可靠性强。
Redis支持部分事务(通过 MULTI、EXEC),但缺乏回滚机制,安全性略逊。
6.数据容量
MySQL适用于大数据集,TB 级别数据处理能力强。支持主从复制、分库分表、集群等扩展方式。
Redis受内存大小限制,适合小而频繁的数据。支持主从复制、Cluster 模式,扩展性强,但需要手动管理。
7.应用场景

场景MySQLRedis
数据持久化核心业务系统(如订单、库存、财务系统等)适用于对数据完整性要求不高的场景(如日志、缓存等)。
高并发读写适合中等并发场景。擅长秒杀、排行榜、实时计数等高并发场景。
临时数据存储数据需落盘保存,临时数据不推荐。适用于短暂数据缓存,数据可随时丢弃。
消息队列不适合。适用于轻量级消息队列(如 pub/sub)。

 在实际开发中,MySQL + Redis 常被组合使用:

  • Redis 作为缓存层,快速返回热点数据。
  • MySQL 作为持久化存储层,保证数据完整性。
  • Cache Aside 模式(缓存旁路):
    读取数据时,先查询 Redis,若未命中再查询 MySQL 并将结果写入 Redis。
    写入数据时,同时更新 MySQL 和 Redis(或选择延迟淘汰 Redis 数据)。

Mysql底层数据结构,在磁盘上如何存储的?

MySQL 的底层数据存储结构以其存储引擎为基础,最常用的存储引擎是 InnoDB(默认)和 MyISAM

InnoDB的底层数据结构

InnoDB 将数据以 表空间 (Tablespace) 的形式组织,并进一步划分为以下层次:

  • 表空间(ibd文件):一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。
  • :由多个区组成,是 InnoDB 分配和管理数据的基本单位.
    分为
          数据段(Leaf node segment)
          索引段(Non-leaf node segment)
          回滚段(Rollback segment)
    InnoDB是索引组织表,数据段就是B+tree的叶子节点,索引段即为B+tree的非叶子节点。段用来管理多个Extent(区)。
  • :表空间的单元结构,每个区的大小为1M。默认情况下,InnoDB存储引擎页大小为16K,既一个区中一共有64个连续的页。
  • :页是 InnoDB 磁盘存储的最小单元,默认大小为 16KB。
    页的类型多样,常见的有:
          数据页 (DATA_PAGE):存储表的行数据(叶子节点)
          索引页 (INDEX_PAGE):存储 B+树的非叶子节点
          Undo 页 (UNDO_PAGE):存储回滚日志
    页的内容以行记录 (Row Record) 为核心,页内数据按主键有序存储,支持范围查询。
  • 行:InnoDB存储引擎数据是按行进行存放的。

InnoDB 的磁盘存储结构采用页 (Page) 为核心单元,通过表空间 (Tablespace)段 (Segment)区 (Extent) 等机制,有效组织数据并提升性能。其设计充分利用了 B+树、缓冲池、日志等机制,确保数据的高效存储与快速恢复。

InnoDB 的数据组织体现了层次化的设计思路:

B+树 提供快速检索能力,非叶子节点存储指针,叶子节点对应数据页。
页 (Page) 是磁盘 I/O 的基本单位,直接存储行数据或索引。
区 (Extent)段 (Segment) 提供更大粒度的内存管理,减少碎片化,提高 I/O 性能。
表空间 (Tablespace) 则承载整个数据文件,方便管理与扩展。

Redis的持久化机制?

什么是RDB和AOF-CSDN博客
RDB(Redis DataBase)快照 
AOF(Append-Only File)只追加日志文件


RDB 是 Redis 通过创建 数据快照 (snapshot) 来持久化数据的一种机制。它会将某一时刻的内存数据以二进制文件 (.rdb) 形式存储到磁盘中。
AOF 是 Redis 通过将 每次写操作 以日志形式记录下来的持久化机制。

在生产环境中,推荐同时开启 RDB 和 AOF 以结合两者的优点:

✅ RDB 负责快速备份,适合全量恢复。
✅ AOF 负责实时记录,确保数据安全。

Redis的内存淘汰策略都有什么

1. noeviction(默认策略)
描述:当Redis内存不足时,不执行任何淘汰操作,所有的写操作都会返回错误。这种策略可以确保Redis内存不会被其他进程抢占,但会导致Redis进程被强制杀死,数据全部丢失,因此不建议在生产环境中使用。
适用场景:通常不推荐使用,除非对数据的完整性有极高的要求,且能够接受在内存不足时拒绝所有写操作的后果。
2. allkeys-lru
描述
:从所有key中使用LRU(最近最少使用)算法进行淘汰。LRU算法通过记录每个key的最近访问时间,淘汰最长时间未被访问的key。
适用场景:适用于缓存场景,可以确保经常被访问的数据保留在内存中,提高缓存命中率。

3. volatile-lru
描述
:从设置了过期时间的key中使用LRU算法进行淘汰。这种策略只针对设置了过期时间的key进行操作,优先淘汰那些最近最少使用且已经设置了过期时间的key。
适用场景:适用于需要设置过期时间,同时希望缓存尽可能保留热门数据的场景。

4. allkeys-random
描述:从所有key中随机淘汰数据。这种策略不考虑key的访问频率或过期时间,完全随机选择key进行淘汰。
适用场景:在不确定哪些key是热门数据,或者对淘汰策略没有特殊要求的情况下,可以使用这种简单的随机淘汰策略。

5. volatile-random
描述:从设置了过期时间的key中随机淘汰。与allkeys-random类似,但这种策略只针对设置了过期时间的key进行操作。
适用场景:在需要淘汰过期key,但又不希望完全依赖LRU算法的情况下,可以使用这种随机淘汰策略。

6. volatile-ttl
描述:在设置了过期时间的key中,淘汰过期时间剩余最短的。这种策略优先淘汰那些即将过期的key,确保Redis存储的数据尽可能新鲜。
适用场景:适用于需要快速淘汰即将过期数据的场景,比如缓存即将失效的会话信息等。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步:确定靶机IP为192.168.0.107 第二步:扫描后台及开放端口 第三步:进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…

【AI News | 20250322】每日AI进展

AI Repos 1、DeTikZify 可以把草图或图形转换成TikZ代码的模型,可用来绘制复杂的科学图表,输入草图或文字描述即可转换成TikZ代码。DeTikZify强大的地方在于它能理解图表的语义信息, 能识别图表中的不同组成部分及其含义,比如坐标…

三主热备架构

1.要求 角色主机名软件IP地址用户client192.168.72.90keepalivedvip192.168.72.100masterserverAkeepalived, nginx192.168.72.30backupserverBkeepalived, nginx192.168.72.31backupserverCkeepalived, nginx192.168.72.32webtomcat1tomcat192.168.72.41webtomcat2tomcat192.1…

LiteratureReading:[2023] GPT-4: Technical Report

文章目录 一、文献简明(zero)二、快速预览(first)1、标题分析2、作者介绍3、引用数4、摘要分析(1)翻译(2)分析 5、总结分析(1)翻译(2)…

java使用Apache POI 操作word文档

项目背景: 当我们对一些word文档(该文档包含很多的标题比如 1.1 ,1.2 , 1.2.1.1, 1.2.2.3)当我们删除其中一项或者几项时,需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…

OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

这几天搞鸿蒙,需要编译一些第三方库到鸿蒙系统使用。 头疼死了,搞了一个多星期总算搞定了。 开贴记坑。 一、SDK下载 1.下载 在linux下使用命令 wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_02…

SVN简明教程——下载安装使用

SVN教程目录 一、开发中的实际问题二、简介2.1 版本控制2.2 Subversion2.3 Subversion的优良特性2.4 工作原理2.5 SVN基本操作 三、Subversion的安装与配置1. 服务器端程序版本2. 下载源码包3. 下载二进制安装包4. 安装5. 配置版本库① 为什么要配置版本库?② 创建目…

OpenCV旋转估计(1)用于估计图像间仿射变换关系的类cv::detail::AffineBasedEstimator

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 基于仿射变换的估计器。 这种估计器使用匹配器估算的成对变换来为每个相机估算最终的变换。 cv::detail::AffineBasedEstimator 是 OpenCV 库中…

大数据学习栈记——HBase安装

本文介绍大数据技术中流行的非关系型数据库HBase的安装,操作系统:Ubuntu24.04 安装Zookeeper 安装HBase前需要先安装Zookeeper,HBase使用Zookeeper作为其分布式协同服务,存储了HBase集群的元数据信息,并提供了分布式…

SpringBoot+VUE(Ant Design Vue)实现图片下载预览功能

目录 背景 1.后端实现下载接口 2.前端请求实现 第一步:导入api 第二步:请求接口 3.前端展示实现 4.实现效果展示 5.总结 背景 这段时间通过SpringBootVUE(Ant Design Vue)框架做了一个项目,但是在图片下载,展示的时候在网…

Java 推送钉钉应用消息

前言: 本文的目的是通过手机号获取钉钉成员的userid,实现钉钉应用的消息推送。 一、创建钉钉应用 登录钉钉开放平台 二、应用相关凭证 需要获取 Client ID (原 AppKey 和 SuiteKey) Client Secret (原 AppSecret 和 SuiteSecret) App ID 原企业内部…

SpringCloud介绍

什么是SpringCloud? SpringCloud 是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。 官方介绍: SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置,博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接:GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀 直接下载解压 2.需要自己准备的文件 文件结构如下:红…

【Linux】——环境变量与进程地址空间

文章目录 环境变量环境变量的概念常见的环境变量PATH相关指令 main的三个参数前两个参数第三个参数 程序地址空间进程地址空间 环境变量 环境变量的概念 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,将来会以shell的形式传递给所有进程&…

Kafka--常见问题

1.为什么要使用 Kafka,起到什么作用 Kafka是一个高吞吐量、分布式、基于发布订阅的消息系统,它主要用于处理实时数据流 Kafka 设计上支持高吞吐量的消息传输,每秒可以处理数百万条消息。它能够在处理大量并发请求时,保持低延迟和…

Flutter:页面滚动,导航栏背景颜色过渡动画

记录:导航默认透明,页面发生滚动后,导航背景色由0-1,过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…

探秘格式化:数据危机与恢复之道

引言 在数字化飞速发展的当下,数据已然成为我们生活中不可或缺的一部分。无论是珍贵的家庭照片、重要的工作文档,还是企业关键的业务数据,都承载着我们的回忆、努力和希望。然而,格式化这一操作却如同隐藏在数字世界中的“幽灵”…

人工智能 - 通用 AI Agent 之 LangManus、Manus、OpenManus 和 OWL 技术选型

一、核心项目概览 1. Manus(闭源通用 AI Agent) 定位 :全球首个全流程自动化通用 AI Agent,GAIA 基准测试 SOTA 水平。核心能力 : 全流程自动化 :从任务规划(如撰写报告)到执行(代码生成、表格制作)的端到端处理。智能纠错机制 :基于沙箱环境的实时错误反思与调整…

封装一个分割线组件

最终样式 Vue2代码 <template><div class"sep-line"><div class"sep-label"><span class"sep-box-text"><slot>{{ title }}</slot> <!-- 默认插槽内容&#xff0c;如果没有传递内容则使用title -->&…

走进Java:String字符串的基本使用

❀❀❀ 大佬求个关注吧~祝您开心每一天 ❀❀❀ 目录 一、什么是String 二、如何定义一个String 1. 用双引号定义 2. 通过构造函数定义 三、String中的一些常用方法 1 字符串比较 1.1 字符串使用 1.2 字符串使用equals() 1.3 使用 equalsIgnoreCase() 1.4 cpmpareTo…