【数据库相关MySql、Redis、MongoDB】

一、三种数据库的对比

MongoDB、MySQL 和 Redis 是三种不同类型的数据库系统,它们在数据模型、存储方式、性能特点、适用场景等方面存在显著区别。以下是它们的详细对比:

1. 数据模型

MySQL
  • 类型:RDBMS(关系型数据库)

  • 数据模型:以表格的形式存储数据,数据以行和列的形式组织,每行代表一条记录,每列代表一个属性。表之间可以通过外键等机制建立关系。

  • 特点:需要预先定义表结构,包括字段名、字段类型、字段长度等,数据结构固定。

MongoDB
  • 类型:NoSQL(文档型数据库)

  • 数据模型:以文档的形式存储数据,每个文档是一个键值对集合,类似于 JSON 格式。文档存储在集合(Collection)中,集合类似于关系型数据库中的表。

  • 特点:不需要预先定义固定的表结构,文档可以有不同的字段和结构,非常灵活。

Redis
  • 类型:NoSQL(键值存储数据库)

  • 数据模型:以键值对的形式存储数据,支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。

  • 特点:数据存储在内存中,读写速度极快,适合高并发场景。

2. 存储方式

MongoDB
  • 存储位置:数据存储在磁盘上,支持多种存储引擎(如 WiredTiger、MMAPv1 等)。

  • 持久化:支持持久化存储,数据不会因服务重启而丢失。

  • 适用场景:适合存储半结构化或非结构化数据,如日志数据、用户画像数据等。

MySQL
  • 存储位置:数据存储在磁盘上,支持多种存储引擎(如 InnoDB、MyISAM 等)。

  • 持久化:支持持久化存储,数据不会因服务重启而丢失。

  • 适用场景:适合存储结构化数据,如用户信息表、订单表等,数据之间的关系可以通过外键等机制来维护。

Redis
  • 存储位置:数据存储在内存中,支持 RDB(快照)和 AOF(追加文件)两种持久化机制。

  • 持久化:虽然数据存储在内存中,但通过 RDB 和 AOF 持久化机制可以将数据定期保存到磁盘上,确保数据的持久性。

  • 适用场景:适合高并发、低延迟的场景,如缓存、会话存储、消息队列等。

3. 性能特点

MongoDB
  • 读写性能:读写性能较好,尤其是在处理海量数据和高并发场景时表现出色。

  • 扩展性:支持水平扩展,可以通过分片(Sharding)将数据分布到多个服务器上,提高系统的性能和容量。

  • 事务支持:MongoDB 4.0 及以上版本引入了多文档事务,但其事务机制与 MySQL 的事务有所不同。

MySQL
  • 读写性能:在处理关系复杂、事务性强的业务时性能较好,能够保证数据的完整性和一致性。

  • 扩展性:支持垂直扩展(增加服务器性能)和水平扩展(如 MySQL Cluster),但水平扩展的复杂性较高。

  • 事务支持:支持 ACID(原子性、一致性、隔离性、持久性)事务,适合需要事务保证的场景。

Redis
  • 读写性能:读写速度极快,通常可以达到微秒级,适合高并发、低延迟的场景。

  • 扩展性:支持主从复制、哨兵系统和集群,可以通过增加更多的内存和服务器节点来实现水平扩展。

  • 事务支持:支持事务,但事务的执行是原子性的,不会回滚。

4. 适用场景

MongoDB
  • 适用场景

    • 存储半结构化或非结构化数据,如日志数据、用户画像数据等。

    • 需要快速开发和迭代的场景,数据结构可能频繁变化。

    • 处理海量数据和高并发的场景,如社交媒体应用、物联网应用等。

MySQL
  • 适用场景

    • 存储结构化数据,如用户信息表、订单表等。

    • 需要事务支持和数据一致性的场景,如金融系统、电子商务系统等。

    • 需要复杂查询和分析的场景,如数据分析和报表生成。

Redis
  • 适用场景

    • 缓存热点数据,减少对后端数据库的访问压力。

    • 存储会话信息,如用户登录状态。

    • 实现消息队列,支持高并发的生产者和消费者。

    • 实时数据处理,如排行榜、计数器等。

5. 其他特点

MongoDB
  • 社区和生态:拥有庞大的社区和丰富的生态系统,有大量的学习资源和工具。

  • 成本:社区版开源免费,企业版需要付费购买。

MySQL
  • 社区和生态:作为传统的数据库系统,拥有庞大的用户群体和丰富的生态系统,有大量的学习资源、工具和社区支持。

  • 成本:社区版开源免费,企业版需要付费购买。

Redis
  • 社区和生态:拥有活跃的社区和丰富的生态系统,有大量的学习资源和工具。

  • 成本:开源免费,适合各种规模的应用。

总结

  • MongoDB:适合存储半结构化或非结构化数据,支持灵活的数据模型和水平扩展,适合高并发和海量数据场景。

  • MySQL:适合存储结构化数据,支持事务和复杂查询,适合需要数据一致性和复杂分析的场景。

  • Redis:适合高并发、低延迟的场景,支持多种数据结构,适合缓存、会话存储和消息队列等场景。

二、详述MongoDB

1、NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写。NoSQL用于超大规模数据的存储

2、管理工具下载:

MongoDB Compass是什么? - MongoDB Compass - MongoDB Docs

4、常用的 MongoDB 语句

以下是常用的 MongoDB 语句,按功能分类整理:

4.1 数据库操作

  • 查看当前数据库db

  • 列出所有数据库show dbsshow databases

  • 切换数据库use <database>,如果数据库不存在,插入数据时会自动创建

  • 删除当前数据库db.dropDatabase()

4.2 集合操作

  • 创建集合db.createCollection("collection_name"),通常使用隐式创建即可,即插入数据时自动创建集合

  • 查看当前数据库中的集合show collectionsshow tables

  • 删除集合db.collection.drop()

4.3 文档操作

4.3.1 插入文档
  • 插入单个文档db.collection.insertOne({key:value})

  • 插入多个文档db.collection.insertMany([{key:value}, {key:value}])

  • 插入单条或多条文档db.collection.insert({key:value})db.collection.insert([{key:value}, {key:value}])

4.3.2 查询文档
  • 查询所有文档db.collection.find()

  • 查询指定条件的文档db.collection.find({key:value})

  • 查询并限制返回的字段db.collection.find({}, {key:1, key:0})

  • 格式化查看查询结果db.collection.find().pretty()

  • 查询并排序db.collection.find().sort({key:1})

  • 查询并限制返回的文档数量db.collection.find().limit(10)

  • 查询并跳过指定数量的文档db.collection.find().skip(5)

  • 使用条件运算符查询

    • 大于:db.collection.find({key:{$gt:value}})

    • 小于:db.collection.find({key:{$lt:value}})

    • 等于:db.collection.find({key:value})

    • 不等于:db.collection.find({key:{$ne:value}})

    • in:db.collection.find({key:{$in:[value1, value2]}})

    • not in:db.collection.find({key:{$nin:[value1, value2]}})

  • 使用正则表达式查询db.collection.find({key:{$regex:"pattern"}})

  • 联合查询db.collection.find({key1:value1, key2:value2})

4.3.3 更新文档
  • 更新单个文档db.collection.updateOne({query}, {$set:{key:value}})

  • 更新多个文档db.collection.updateMany({query}, {$set:{key:value}})

  • 替换单个文档db.collection.replaceOne({query}, {newKey:newValue})

  • 默认更新一个文档,可配置 multi 参数更新多个文档db.collection.update({query}, {update}, {multi:true})

  • 使用 upsert 参数在查询为空时插入文档db.collection.update({query}, {update}, {upsert:true})

4.3.4删除文档
  • 删除单个文档db.collection.deleteOne({query})

  • 删除多个文档db.collection.deleteMany({query})

4.4 索引操作

  • 创建索引db.collection.createIndex({key:1})

  • 查看索引db.collection.getIndexes()

  • 删除索引db.collection.dropIndex("index_name")

4.5 其他操作

  • 统计集合中的文档数量db.collection.count()

  • 查看集合的统计信息db.collection.stats()

  • 查看数据库的统计信息db.stats()

  • 查看服务器状态db.serverStatus()

这些语句涵盖了 MongoDB 的基本操作,包括数据库、集合和文档的增删改查等

三、详述Redis

1、什么是Redis:

REmote DIctionary Server(远程字典服务)Redis, 是一个基于内存的key-value 存储数据库,是跨平台的非关系型数据库。

Redis 基于内存设计的主要原因是内存的高性能和低延迟特性,这使得 Redis 能够快速读写数据,满足高并发和实时处理的需求

2、Redis的值

支持多种数据结构, 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)--散列、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

3、Redis常用场景:

适用于需要快速响应和高并发处理的场景:

  • 缓存:通过内存存储热点数据,加速数据访问,减少对后端数据库的访问压力。

  • 会话存储:存储用户会话信息,快速读取和更新用户状态

  • 消息队列:使用列表或发布/订阅模式实现消息队列。快速处理消息,支持高并发的生产者和消费者

  • 分布式锁:利用 Redis 的原子操作实现锁机制。

  • 排行榜和计数器:使用有序集合实现排行榜功能。

4. (操作键)基本命令

常用的 Redis 命令:

  • 设置键值对

    SET mykey "Hello, Redis!"
  • 获取键值对

    GET mykey
  • 删除键值对

    DEL mykey
  • 设置过期时间

    EXPIRE mykey 60  # 设置 mykey 的过期时间为 60 秒
  • 查看所有键

    KEYS *
  • 查看键的类型

    TYPE mykey

5. 对值(数据结构)操作

Redis 支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。

对值的操作,主要就是获取和设置

  • 字符串(String)

    SET mykey "value"
    GET mykey
  • 哈希(Hash)

    HSET user:1001 name "Alice" age 25
    HGETALL user:1001
  • 列表(List)

    LPUSH tasks "task1"
    LPUSH tasks "task2"
    LPOP tasks
  • 集合(Set)

    SADD tags "Redis" "Database"
    SMEMBERS tags
  • 有序集合(Sorted Set)

    ZADD leaderboard 100 "player1"
    ZADD leaderboard 150 "player2"
    ZRANGE leaderboard 0 -1 WITHSCORES

6. 持久化机制

持久化机制,Redis 可以在服务重启后快速恢复数据,确保数据的完整性和一致性。

Redis 的持久化机制是指将内存中的数据保存到磁盘上,以便在 Redis 服务重启后能够恢复数据。
由于 Redis 是基于内存的数据库,数据存储在内存中,一旦服务重启或发生故障,内存中的数据会丢失。
因此,持久化机制对于保证数据的持久性和可靠性至关重要

持两种持久化方式:

  • RDB(快照):在指定时间间隔内生成数据快照,适合数据不频繁变化的场景。

    ​
    RDB (Redis DataBase)是通过快照的方式将内存中的数据以二进制格式写入磁盘文件。
    默认情况下,RDB 持久化是开启的。1)配置 RDB 持久化
    在 Redis 的配置文件 redis.conf 中,可以通过以下配置项来设置 RDB 持久化:save <seconds> <changes><seconds>:表示在指定的时间间隔内。
    <changes>:表示发生了多少次写操作。例如:save 900 1          # 900秒内至少有1次写操作时,进行一次快照
    save 300 10         # 300秒内至少有10次写操作时,进行一次快照
    save 60 10000       # 60秒内至少有10000次写操作时,进行一次快照2)如果要关闭 RDB 持久化,
    可以将 save 参数列表清空,或者直接注释掉所有 save 行:save ""

  • AOF(追加文件):记录每次的写操作,适合需要更高数据一致性的场景。

    AOF 是通过记录每次写操作的命令来实现持久化,这些命令会被追加到一个文件中。
    AOF 持久化可以提供更好的数据安全性,但会占用更多的磁盘空间。1)配置 AOF 持久化
    在 redis.conf 文件中,可以通过以下配置项来设置 AOF 持久化:appendonly yesyes:启用 AOF 持久化。
    no:禁用 AOF 持久化。2)AOF 的写入策略可以通过以下配置项设置:appendfsync alwaysalways:每次写操作都会同步到磁盘,最安全但性能最低。
    everysec:每秒同步一次,性能较好,但可能会丢失一秒内的数据。
    no:不自动同步,由操作系统决定何时同步。
  • 混合持久化

    混合持久化是 Redis 4.0 之后新增的一种持久化方式,结合了 RDB 和 AOF 的优点。
    在文件开头以 RDB 的形式保存数据,然后追加后续的写操作命令。1) 配置混合持久化
    在 redis.conf 文件中,可以通过以下配置项来启用混合持久化:rdb-aof-use-rdb-preamble yesyes:启用混合持久化。
    no:禁用混合持久化。2) 关闭持久化
    如果需要关闭 Redis 的持久化功能,需要同时关闭 RDB 和 AOF 持久化:2.1)关闭 RDB 持久化:save ""2.2)关闭 AOF 持久化:appendonly no2.3)关闭混合持久化:rdb-aof-use-rdb-preamble no关闭持久化后,需要重启 Redis 服务才能生效。

7. 高可用架构

Redis 提供主从复制和哨兵模式,确保系统的高可用性:

  • 主从复制:主节点负责写入操作,从节点负责读取操作。

  • 哨兵模式:通过哨兵监控多个 Redis 实例,自动进行故障转移。

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

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

相关文章

大疆上云api介绍

概述 目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人…

3、孪生网络/连体网络(Siamese Network)

目的&#xff1a; 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法&#xff0c; 但是通过学习Siamese Network&#xff0c;非常有助于理解其他Meta Learning算法。 这里介绍了两种方法&#xff1a;Siame…

OpenCV图像拼接(7)根据权重图对源图像进行归一化处理函数normalizeUsingWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::normalizeUsingWeightMap 是 OpenCV 中用于图像拼接细节处理的一个函数。它根据权重图对源图像进行归一化处理&#xff0c;通常用于…

卷积神经网络 - AlexNet各层详解

AlexNet的层次化设计&#xff0c;使得 AlexNet 能够逐层提取从简单边缘到复杂图形的特征&#xff0c;同时结合归一化、池化和 Dropout 技术&#xff0c;有效提升了训练速度和泛化能力&#xff0c;成为推动深度学习发展的重要里程碑。本文我们来理解AlexNet各层的参数设置以及对…

【设计模式】工厂模式

首先了解一下什么是工厂方法模式&#xff1f; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种方法来封装对象的创建逻辑。具体来说&#xff0c;它通过定义一个创建对象的接口&#xff08;即工厂方法&#xff09;&a…

centos 7 部署FTP 服务用shell 脚本搭建

#!/bin/bash# 检查是否以root身份运行脚本 if [ "$EUID" -ne 0 ]; thenecho "请以root身份运行此脚本。"exit 1 fi# 安装vsftpd yum install -y vsftpd# 启动vsftpd服务并设置开机自启 systemctl start vsftpd systemctl enable vsftpd# 配置防火墙以允许F…

基于Spring Boot的个性化商铺系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

AI(DeepSeek、ChatGPT)、Python、ArcGIS Pro多技术融合下的空间数据分析、建模与科研绘图及论文写作

人工智能&#xff08;AI&#xff09;与ArcGIS Pro的结合&#xff0c;为空间数据处理和分析开辟了前所未有的创新路径。AI通过强大的数据挖掘、深度学习及自动化能力&#xff0c;可高效处理海量、多源、异构的空间数据&#xff0c;极大提升了分析效率与决策支持能力。而ArcGIS P…

2025最新3个wordpress好用的主题

红色大气的wordpress企业主题&#xff0c;适合服务行业的公司搭建企业官方网站使用。是一款专为中小企业和个人开发者设计的WordPress主题&#xff0c;旨在提供专业的网站构建解决方案。 通过此WordPress主题&#xff0c;用户可以轻松创建和维护一个专业的企业网站&#xff0c…

Spring AI Alibaba AudioModel使用

一、AudioModel简介 1、AudioModel 当前&#xff0c;Spring AI Alibaba 支持以下两种通义语音模型的适配&#xff0c;分别是&#xff1a; 文本生成语音 SpeechModel&#xff0c;对应于 OpenAI 的 Text-To-Speech (TTS) API录音文件生成文字 DashScopeAudioTranscriptionMode…

时隔多年,终于给它换了皮肤,并正式起了名字

时隔多年&#xff0c;终于更新了直播推流软件UI&#xff0c;并正式命名为FlashEncoder。软件仍使用MFC框架&#xff0c;重绘了所有用到的控件&#xff0c;可以有效保证软件性能&#xff0c;也便于后续进一步优化。 下载地址&#xff1a;https://download.csdn.net/download/Xi…

Python备赛笔记2

1.区间求和 题目描述 给定a1……an一共N个整数&#xff0c;有M次查询&#xff0c;每次需要查询区间【L,R】的和。 输入描述: 第一行包含两个数&#xff1a;N,M 第二行输入N个整数 接下来的M行&#xff0c;每行有两个整数&#xff0c;L R&#xff0c;中间用空格隔开&…

各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写

上一篇下一篇RNN&#xff08;中集&#xff09;待编写 代码详解 pytorch 官网主要有两个可调用的模块&#xff0c;分别是 nn.RNNCell 和 nn.RNN &#xff0c;下面会进行详细讲解。 RNN 的同步多对多、多对一、一对多等等结构都是由这两个模块实现的&#xff0c;只需要将对输入…

python每日十题(10)

在Python语言中&#xff0c;源文件的扩展名&#xff08;后缀名&#xff09;一般使用.py。 保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字&#xff0c;分别为&#xff1a;and&#xff0c;as&#xff0c;assert&am…

Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南

实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段&#xff0c;私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目&#xff0c;成功实现Docker Registry至Ha…

【Python】pillow库学习笔记3-Image.mode

提取颜色通道时&#xff0c;偶然换了个图片&#xff0c;结果在在运行代码时一直报错&#xff1a; from PIL import Image im Image.open(city2.png) r,g,b im.split() om Image.merge("RGB", (b,g,r)) om.save(cBGR.jpg)Traceback (most recent call last): File…

PDF打开密码教程:让您的文档更安全

在数字化办公时代&#xff0c;PDF 文件常包含敏感信息&#xff0c;这时候&#xff0c;给PDF文件设置打开密码就成了一种有效的保护措施。这样&#xff0c;只有输入正确密码的人才能查看内容&#xff0c;大大提高了文件的安全性。如果您对这方面不清楚&#xff0c;就来看看小编分…

SOFAActs 介绍-01-白盒测试框架 overview

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

Snipaste软件出现测量像素不准的问题

最近写一些前端布局的时候发现使用snipaste测量dom元素大小的时候出现和实际不符的情况。我平时写代码的时候是笔记本和一个显示屏&#xff0c;在笔记本上测量的时候发现总是和实际大小不符合&#xff0c;而在显示屏上测量的时候却并无差错&#xff0c;真是奇了怪了。 后来发现…

笔试专题(三)

文章目录 字符串中找出连续最长的数字串题解代码 拼三角题解代码 字符串中找出连续最长的数字串 题目链接 题解 1. 考察双指针 模拟 2. 算法思路&#xff1a;给定一个i 0&#xff0c;让i&#xff0c;如果遇到数字字符就创建一个变量j i&#xff0c;让j去遍历&#xff0c…