基础知识:深入理解MongoDB、MySQL与Redis的应用与实践
基础知识:深入理解MongoDB、MySQL与Redis的应用与实践
在现代应用开发中,数据库系统的选择对于系统的性能、扩展性和维护性有着至关重要的影响。MongoDB、MySQL 和 Redis 是三种流行的数据库技术,它们各自有着独特的特点和适用场景。本文将详细介绍这三者的区别,并通过架构图说明它们在系统中的应用环节。最后,我们将提供在 Spring Boot 中使用这三种数据库的 Java 类和配置文件的示例。
文章目录
- 基础知识:深入理解MongoDB、MySQL与Redis的应用与实践
- 一、MongoDB
- MongoDB 的特点:
- 应用场景:
- MongoDB 在系统中的位置:
- Spring Boot 中 MongoDB 的使用示例:
- 二、MySQL
- MySQL 的特点:
- 应用场景:
- MySQL 在系统中的位置:
- Spring Boot 中 MySQL 的使用示例:
- 三、Redis
- Redis 的特点:
- 应用场景:
- Redis 在系统中的位置:
- Spring Boot 中 Redis 的使用示例:
- 四、总结对比
一、MongoDB
MongoDB 是一种基于文档的 NoSQL(Not Only SQL,非关系型数据库)数据库,使用 BSON(二进制 JSON)格式存储数据。它的特点包括高扩展性、灵活的文档模型、支持地理空间索引和强大的查询能力。
MongoDB 的特点:
- 数据模型:文档存储(JSON 格式),适用于非结构化数据。
- 扩展性:支持水平扩展(Sharding,分片)。
- 查询能力:支持复杂的查询、聚合操作。
- 事务:自 4.0 版本后,支持多文档事务。
应用场景:
- 内容管理系统
- 大数据分析
- 实时数据处理
MongoDB 在系统中的位置:
在典型的应用架构中,MongoDB 通常作为主要的数据库存储,处理来自应用层的数据请求。下面的架构图展示了 MongoDB 在系统中的具体位置及其内部结构:
- 应用层(A):代表用户的应用程序,发送数据读写请求。
- MongoDB 数据库(B):接收并处理来自应用层的请求。
- 分片集群(C):用于水平扩展数据库,分散数据以提高性能和容量。
- 副本集(D):提供数据的高可用性和冗余,确保数据的安全性。
Spring Boot 中 MongoDB 的使用示例:
在构建基于 Spring Boot 的应用程序时,集成 MongoDB 可以实现对非结构化数据的高效管理。以下示例展示了如何在 Spring Boot 中定义一个用户实体,并配置与 MongoDB 的连接。
Java 类:
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;/*** 用户实体类,映射到MongoDB中的"users"集合*/
@Document(collection = "users") // 指定MongoDB文档的集合名
public class User {@Id // 指定文档的唯一标识符private String id;private String name;private int age;// Getters 和 Setters
}
配置文件 application.yml:
spring:data:mongodb:uri: mongodb://localhost:27017/mydatabase # 配置MongoDB连接URI
讲解:
- 在上述 Java 类中,
@Document注解将User类映射到 MongoDB 的 “users” 集合。 @Id注解指定了文档的唯一标识符字段,即id。application.yml文件中,spring.data.mongodb.uri配置了应用程序连接到本地 MongoDB 数据库的 URI。
二、MySQL
MySQL 是一种关系型数据库管理系统(Relational Database Management System,RDBMS),使用结构化查询语言(Structured Query Language,SQL)进行数据的操作。MySQL 以其可靠性、高性能和广泛的应用而闻名。
MySQL 的特点:
- 数据模型:表格结构(行和列),适用于结构化数据。
- 扩展性:通常通过主从复制(Replication,主从复制)和分区表实现扩展。
- 查询能力:支持复杂的 JOIN 操作和事务处理。
- 事务:支持 ACID(Atomicity, Consistency, Isolation, Durability,原子性、一致性、隔离性、持久性)事务,保证数据的一致性。
应用场景:
- 电子商务网站
- 传统业务系统(ERP、CRM)
- 数据仓库
MySQL 在系统中的位置:
在典型的企业级应用架构中,MySQL 通常作为关系型数据库,处理结构化数据的存储和查询请求。MySQL 支持多种扩展机制,如主从复制和分区表,用于增强系统的扩展性和数据一致性。下图展示了 MySQL 在系统中的位置及其扩展机制:
- 应用层(A):代表应用程序,执行数据的读写操作。
- MySQL 数据库(B):作为核心数据存储,处理结构化数据。
- 主从复制(C):用于数据的高可用性和读写分离,增强系统的容错能力。
- 分区表(D):通过分区表技术,将大表数据拆分,提高查询性能和管理效率。
Spring Boot 中 MySQL 的使用示例:
在基于 Spring Boot 的应用程序中,MySQL 常用于持久化结构化数据。以下示例展示了如何在 Spring Boot 中定义一个用户实体,并配置与 MySQL 的连接。
Java 类:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;/*** 用户实体类,映射到MySQL中的表*/
@Entity // 标识为JPA实体类,映射到MySQL数据库表
public class User {@Id // 标识主键字段@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成主键值private Long id;private String name;private int age;// Getters 和 Setters
}
配置文件 application.yml:
spring:datasource:url: jdbc:mysql://localhost:3306/mydatabase # 配置MySQL数据库连接URLusername: root # 数据库用户名password: secret # 数据库密码jpa:hibernate:ddl-auto: update # 配置JPA自动生成数据库表结构show-sql: true # 打印SQL语句
讲解:
- 在上述 Java 类中,
@Entity注解将User类映射为 MySQL 数据库中的一张表。 @Id和@GeneratedValue注解用于标识主键字段及其生成策略(如自动递增)。application.yml文件中,spring.datasource.url配置了应用程序连接到 MySQL 数据库的 URL。
三、Redis
Redis 是一种基于内存的键值存储系统,通常用于缓存、消息队列等场景。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。
Redis 的特点:
- 数据模型:键值对存储,支持多种复杂数据结构。
- 扩展性:支持主从复制和哨兵模式,轻松实现高可用性。
- 性能:极高的读写性能,适用于缓存。
- 持久化:支持数据持久化,提供 RDB(Redis Database Backup,Redis 数据库备份)和 AOF(Append Only File,追加日志文件)两种方式。
应用场景:
- 缓存系统
- 会话管理
- 实时排行榜
Redis 在系统中的位置:
在典型的分布式系统架构中,Redis 通常用作高速缓存,以减轻数据库的负载并加快数据的访问速度。Redis 还可以通过持久化和主从复制来确保数据的高可用性和安全性。下图展示了 Redis 在系统中的位置及其扩展功能:
- 应用层(A):代表应用程序,发起对缓存数据的读写请求。
- Redis 缓存(B):主要负责加速数据访问,存储热数据。
- 持久化存储(C):通过 RDB(Redis Database Backup,Redis 数据库备份)或 AOF(Append Only File,追加日志文件)机制保存数据,防止数据丢失。
- 主从复制(D):用于数据的高可用性,支持读写分离和数据的冗余备份。
Spring Boot 中 Redis 的使用示例:
在 Spring Boot 应用程序中,Redis 通常用于缓存、会话管理或其他需要快速数据访问的场景。以下示例展示了如何在 Spring Boot 中定义一个实体类,并配置与 Redis 的连接。
Java 类:
import org.springframework.data.redis.core.RedisHash;/*** 用户实体类,映射到Redis中的"User"哈希*/
@RedisHash("User") // 指定Redis存储的实体哈希名称
public class User {private String id;private String name;private int age;// Getters 和 Setters
}
配置文件 application.yml:
spring:redis:host: localhost # Redis服务器地址port: 6379 # Redis服务器端口password: secret # Redis服务器密码
讲解:
- 在上述 Java 类中,
@RedisHash注解将User类映射为 Redis 中的一个哈希存储。 spring.redis.host和spring.redis.port用于配置 Redis 服务器的连接地址和端口。
四、总结对比
我们通过下表来总结 MongoDB、MySQL 和 Redis 的主要区别:
| 特性 | MongoDB | MySQL | Redis |
|---|---|---|---|
| 数据模型 | 文档(JSON/BSON) | 表格(行/列) | 键值对 |
| 扩展性 | 支持 Sharding(分片) | 主从复制(Replication,主从复制)和分区表 | 主从复制、哨兵模式 |
| 事务支持 | 支持多文档事务 | 支持 ACID 事务(Atomicity, Consistency, Isolation, Durability,原子性、一致性、隔离性、持久性) | 不支持(部分支持 Lua 脚本) |
| 持久化 | 支持 | 支持 | 支持(RDB,Redis 数据库备份 和 AOF,追加日志文件) |
| 查询能力 | 强大的查询和聚合功能 | 复杂的 SQL 查询和 JOIN 操作 | 简单查询(基于键值对) |
| 典型应用场景 | 大数据分析、内容管理系统 | 电子商务、业务系统 | 缓存系统、会话管理 |
| 性能 | 高(依赖于存储和查询设计) | 中(依赖于索引和查询优化) | 极高(基于内存操作) |
通过这些对比和示例,我们可以看到 MongoDB、MySQL 和 Redis 在不同场景下各具优势。MongoDB 适合处理非结构化数据和需要高扩展性的场景;MySQL 则是处理结构化数据和需要事务保证的传统业务系统的首选;而 Redis 由于其极高的性能,通常用于需要快速
响应的缓存层。
相关文章:
基础知识:深入理解MongoDB、MySQL与Redis的应用与实践
基础知识:深入理解MongoDB、MySQL与Redis的应用与实践 在现代应用开发中,数据库系统的选择对于系统的性能、扩展性和维护性有着至关重要的影响。MongoDB、MySQL 和 Redis 是三种流行的数据库技术,它们各自有着独特的特点和适用场景。本文将详…...
Reids中List类型、Set类型、SortedSet类型的常用指令
List类型: Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似: 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据,…...
K8S Ingress 常用配置
目录 介绍ingress 安装 基本使用请查看域名重定向前后端分离配置默认证书配置指定证书配置白名单配置黑名单配置Annotations 配置ConfigMap 配置 匹配请求头速率限制限制客户端的最大连接数限制每秒钟段并发连接数限制每分钟段并发请求突发访问限制限制传输速度速率限制白名单 …...
【K8S】K8S架构及相关组件
文章目录 1 K8S总体架构2 相关组件2.1 控制面板组件2.2 节点组件2.3 附加组件 写在最后 1 K8S总体架构 K8S,全称Kubernetes,是一个开源的容器部署和管理平台,由Google开发,后捐献给云原生计算基金会(CNCF)…...
【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集(无目标函数)【更新中】
【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集(无目标函数)【更新中】 一、FAST(Fourier Amplitude Sensitivity Test) FAST(Fourier Amplitude Sensitivity Test&#…...
【K8S】为什么需要Kubernetes?
文章目录 1 什么是Kubernetes?2 三种常见的应用部署方式2.1 传统部署2.2 虚拟化部署2.3 容器化部署 3 Kubernetes的特点写在最后 1 什么是Kubernetes? Kubernetes是 一个开源的,用于管理云平台中多个主机上的容器化应用,Kubernet…...
【Linux】Linux中查找字符串中的命令
在Linux中,查找字符串的命令通常使用grep。grep是一个强大的工具,用于在文件中搜索指定模式的字符串。以下是一些基本用法: 1.在文件中查找字符串 grep "字符串" 文件名例如,查找文件example.txt中包含“hello”的行&…...
最新HTML设计搜索表单
设计搜索表单 页眉中包含表单,表单中只需包含label和Input. 实现如下效果:文本框动态变宽效果 代码:6.2.4.设计搜索表单.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></t…...
JavaScript constructor原型原型继承
constructor 在 JavaScript 中,构造函数是一种特殊的函数,使用 new 关键字来调用,用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如: function Person(name, age) {this.name name;this.age a…...
使用Python+moviepy保存截取视频画面
一、 使用VideoFileClip对象的的save_frame函数保存截取的第1帧画面 from moviepy.editor import * mvVideoFileClip(/home/Download/leaves.mp4) mv.save_frame(/home/Download/fst.jpg) # 默认保存截取的第1帧画面 二、 使用VideoFileClip对象的的save_frame函数保存截…...
【DOCKER】显示带UI的软件
1. Linux 1.1 宿主机开放X server权限 xhost 1.2 启动容器 docker run -it --rm --privilegedtrue --useru20 --workdir/home/u20 \ -e DISPLAYhost.docker.internal:0 u20:dev1.3 测试 # 安装测试软件 sudo apt-get -y install x11-apps# 显示测试程序 xclock2. Windows …...
Atcoder Beginner Contest 366
传送门 A - Election 2 时间限制:2秒 内存限制:1024MB 分数:100分 问题描述 在 AtCoder 市举行市长选举。候选人是 Takahashi 和 Aoki。 目前有 N 张有效选票投给了这两个候选人,并且计票正在进行中。这里࿰…...
【hexo博客问题】
windows下使用gitbash即可使用 其他bash会产生权限问题 npm install失败 $ npm install npm error code ENOENT npm error syscall open npm error path F:\pf_project\blog_pf\package.json npm error errno -4058 npm error enoent Could not read package.json: Error: E…...
用数组模拟栈和队列
栈 先进后出 //stk 表示定义的栈 //tt表示栈顶的下标 int stk[N], tt 0;//在栈顶上加入一个新的元素 stk[ tt] x;//弹出 tt --;//判断栈是否为空 if (tt > 0) 不为空 else empty//取出栈顶 stk[tt];1.题目 给定一个长度为 N 的整数数列,输出每个数左边第一个…...
Django内置后端和自定义后端
【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 5.2.3 内置…...
嵌入式人工智能(OpenCV-基于树莓派的人脸识别与入侵检测)
1、人脸识别 人脸识别是一种技术,通过检测、跟踪和识别人脸上的关键特征,以确认人脸的身份。它通常用于安保系统、身份验证、社交媒体和人机交互等领域。 人脸识别技术的基本原理是先通过图像处理和计算机视觉算法,提取人脸的特征点和特征描…...
如何选择适合的香港云服务器提供商?
稳定性和可靠性 确保提供商有高水平的服务器正常运行时间,并提供可靠的数据备份和恢复选项。 网络速度和延迟 选择能够提供快速和低延迟网络连接的服务商,尤其是对于目标用户位于中国大陆的企业而言。 客户支持 查看提供商是否提供24/7的客户支持&#x…...
安卓Android JAVA校招/实习面试合集:多线程、强软弱虚引用、进程、内存管理、Activity、Fragment......
本人今年(2023年)参加了很多面试,也有幸拿到了一些大厂的offer,整理了众多面试资料,后续还会分享众多面试资料。 整理成了面试系列,由于时间有限,每天整理一点,后续会陆续分享出来&a…...
Jeecgboot 字典值自动转化:DictAspect类方法改造,支持IPage、List、Object、Map类自动转化,附有源码
改造的是DictAspect类: 原来使用的 parseDictText(Object result)方法,针对返回对象为Result 的IPage的分页列表数据进行动态字典注入,当单个对象查询,列表查询,或者多个数据放到Map中时,就不会自动转化&am…...
DVWA DOM Based Cross Site Scripting (DOM型 XSS)
DVWA DOM Based Cross Site Scripting (DOM型 XSS) 文章目录 DVWA DOM Based Cross Site Scripting (DOM型 XSS)XSS跨站原理DOM型 LowMediumHighImpossible XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据,但没有经过适当验证或转义时,就…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...
