Redis vs MongoDB

news/2024/5/13 13:23:06/文章来源:https://blog.csdn.net/u013433591/article/details/128228306

Redis vs MongoDB

通常情况下,应用系统的技术选型,对于如何选择非关系型数据库,是一个不小的挑战。这不仅考验架构师在技术上的广度和深度,同时也考究对业务细节了解和熟悉程度。只有将业务场景、业务特点、数据特征跟具体的技术特性相结合,才能开发出满足业务需要应用程序,最终实现快速落地的目的。

对于NO-SQL数据库而言,目前比较流行、常用的有Redis、Mongodb、ES、Hbase。 今天来对Redis、Mongodb之间做一个简单的对比,主要包含它们之间的特性,已经应用场景,特此记录。

Redis

Redis是一个内存数据结构存储,提供了丰富的功能。通常应用于数据缓存、消息代理、队列、排名、秒杀等业务场景。

特性

  • 专门的命令行交互界面 – redis-cli
  • 键值对的数据存取方式,支持丰富的数据结构 如 list, set, hash, stream, bitmap 等
  • 最大支持512M的数据存储
  • 支持发布/订阅消息队列
  • 支持管理实时地理空间数据的特殊命令提供地理空间支持 - Geospatial data type
  • 支持LUA脚本
  • 提供多语言客户端连接工具 如Java、golang、Python
  • 支持物联网和嵌入式设备
  • 支持Spring Data
  • 支持Spring Cache 例如Java 客户端Redisson

安装

针对不同的系统Redis提供不同的安装方式。该文章只介绍采用源码的安装方式,在Mac OS10.13.6、Centos7.8两个系统都成功安装

  • 下载源码包

    wget https://download.redis.io/redis-stable.tar.gz
    
  • 解压源代码包

    tar -xzvf redis-stable.tar.gz
    cd redis-stable
    make
    

    如果安装成功后,会在src目录下生成可执行文件

    • redis-server - redis-server 可执行文件
    • redis-cli - redis客户端命令工具
  • 如需要将相关工具安装在**/usr/local/bin**,请执行

    make install
    
  • 启动 - 当执行完 make install 命令后,可以在命令行终端的任意目录使用以下命令启动Redis服务

    redis-server
    

    在这里插入图片描述

    如上图,Redis已经成功启动,从启动日志可以看出Redis的版本信息。

MongoDB

MongoDB是一个NoSQL文档数据库,它以类似JSON的文档结构 (BSON)存储信息。它作为一个无模式数据存储非常有用,可用于设计和实现阶段快速变化的应用程序、原型。

特性

  • 供交互式命令行界面MongoDB Shell(mongosh)执行管理操作和查询/更新数据
  • 支持基于JSON结构的JOIN查询方式
  • 支持不同数据类型的数据检索,如基于地理的搜索、图形搜索和文本搜索
  • 支持多文档ACID事务
  • 支持Spring Data
  • 不同的版本供开发者选择 如社区、企业和云(MongoDB Atlas)版本
  • 多语言驱动程序 如C++, Java, Go, Python, Rust, and Scala
  • 提供MongoDB Compass GUI工具浏览和操作数据
  • 使用MongoDB图表提供数据的可视化表示
  • MongoDB BI连接器提供与BI和分析平台的连接

安装

请查看

Redis 应用场景

缓存

  • 毫秒级响应 - Redis对频繁的客户端情况请求,提供毫秒级时间响应 性能极佳
  • 数据过期 - 使用EXPIRE、EXPIREAT和PEXPIRE等命令设置密钥的过期时间
  • 数据持久化 - 使用PERSIST命令并持久化键值对,使其成为缓存的理想选择

灵活数据存储

Redis提供各种数据结构,如字符串、列表、集合和哈希,以决定如何存储和组织数据。因此,Redis为我们提供了实现数据库结构的完全自由

复杂数据存储

同样地,通过列表、集合和散列的组合,开发者可以为存储实现复杂的数据结构,如队列、数组、排序集和图

Chat, Queue, Message Broker

Redis支持使用模式匹配的方式对数据进行发布、订阅处理。因此,Redis可以支持实时聊天和社交媒体订阅应用程序。类似地,我们可以使用列表数据结构实现轻量级队列。此外,Redis的列表支持原子操作并提供阻塞功能,因此适合实现消息代理。

注意:Redis 5.0之前的版本 发布订阅功能并不完美,对于数据在处理过程中不支持数据持久化、集群消费、广播消费等功能。Redis 5.0之后引入了Redis Streams功能,对一些方面进行了改进,但仍然跟RocketMQ、Kafka有很大的区别

会话存储

Redis提供了一个具有持久性功能的内存数据存储,使其成为存储和管理web/移动应用程序会话的理想选择。使用Redis集中式的对session会话进行存储,解决了分布式应用系统中的会话管理问题

IOT & 嵌入式系统

根据Redis的官方文档,从4和5开始的更新版本支持ARM处理器和树莓派。此外,它在Andriod上运行,并且正在努力将Android作为官方支持的平台。因此,Redis看起来非常适合物联网和嵌入式系统,得益于其小内存占用和低CPU需求。

实时处理

作为一种存储速度极快的数据结构,我们可以将其用于实时处理应用程序。例如,Redis可以有效地服务于提供股价警报、排行榜和实时分析等功能的应用程序。

地理位置服务

Redis提供了专门构建在内存中的数据结构Geo Set(基于排序集),用于管理地理空间索引。此外,它还提供特定的地理命令,如GEOADD、GEOPOS和GEORADIUS,以添加、读取和分析地理空间数据。因此,开发者可以使用Redis构建具有基于位置的功能的实时地理空间应用程序,如微信附近的人。

MongoDB 应用场景

动态查询

MongoDB提供强大的查询功能,支持灵活、复杂的查询场景,如基于地理的搜索、图形搜索和文本搜索,以实现高效的数据检索。同时,在JSON结构化查询的支持下,MongoDB似乎是数据搜索和分析是日常活动的场景的更好选择。

快速架构调整

项目开发初期,由于业务模式不清晰、业务试错等场景。 MongoDB在设计和早期实现阶段非常有用,因为无规则的数据结构,允许开发人员进行快速的产品迭代。它不会对系统底层数据进行固化,支持在产品迭代过程中进行自我优化。

原型制作

通过遵循类似JSON的文档结构,MongoDB允许快速原型、与前端通道的快速集成。同时,它对于不想处理RDBMS复杂性的初级团队也很有用。

动态目录

通过提供一个自我描述的动态模式,MongoDB可以更容易地为电子商务、资产管理和库存等目录添加产品、功能和建议。我们还可以通过索引JSON结构化文档的一个字段或一组字段,在MongoDB中使用表达式查询来实现高级搜索和分析等功能。

移动应用

MongoDB的JSON文档结构允许存储来自各种设备的不同类型的数据以及地理空间索引。此外,数据的水平可扩展性允许移动应用程序的轻松扩展。因此,MongoDB可以为千万级别的用户提供服务,处理数PB的数据,每秒支持数十万次操作,是支持移动应用程序的理想选择。

富应用程序

在RDBMS中为现代内容丰富的应用程序合并各种内容并不容易。另一方面,MongoDB允许存储和提供文本、音频和视频等丰富内容。此外,我们可以使用MongoDB GridFS轻松高效地存储大于16MB的文件。它允许访问大文件的一部分,而无需将整个文件加载到内存中。此外,它还自动在所有服务器上同步我们的文件和元数据。因此,MongoDB看起来更适合支持内容丰富的应用程序。

游戏

与移动和内容丰富的应用程序类似,游戏也需要大规模扩展和动态数据结构。因此,MongoDB可能是游戏应用的一个有前途的选择。

云数据服务

MongoDB Atlas可用于AWS、Google cloud和Azure等多种云服务。此外,通过内置的复制和故障切换机制,它提供了一个高度可用的分布式系统。因此,开发者可以快速部署和管理数据库,并将其用作全球云数据库服务。

总结

综上所述,MongoDB由于其无结构化的文档存储模式,能够适应各种复杂的业务场景,同时Mongodb支持各种灵活、复杂的数据查询和数据统计。Redis由于其内存存储的特性,性能高、系统吞吐量大,响应时间快,偏向于处理各种性能要求比较高的业务场景。

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

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

相关文章

Qt 多线程之QtConcurrent::map(处理序列容器)

QtConcurrent::map()、QtConcurrent::mapped() 和 QtConcurrent::mappedReduced() 函数对一个序列中(例如:QList、QVector)的项目并行地进行计算。 1、map函数 map函数的功能是在其他线程运行指定的函数,map函数有两个参数 第一…

玩好.NET高级调试,你也要会写点汇编

一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多还是…

web课程设计:HTML非遗文化网页设计题材【京剧文化】HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

提高技术质量标准 | Google Play 持续打造优质平台

作者 / Google Play 统筹产品经理 Lauren Mytton在上一篇文章中,我们为大家总结了 Google Play 在近期将要推出多项新功能,接下来我们将会陆续展开逐一详细说明。应用质量是我们在 Google Play 所做一切努力的基础。Android 用户希望从他们下载的应用和游…

kubernetes 1.18 部署 ingress-nginx

文章目录kubernetes 1.18 部署 ingress-nginx1. 下载 yaml 文件2. 安装 ingress-nginx3. 检查安装情况4. 测试验证4.1 查看ingress规则4.2 访问测试5. 其他内容kubernetes 1.18 部署 ingress-nginx 1. 下载 yaml 文件 在 GitHub 下载完成之后可以直接使用,不需要修…

Linux 部署主从DNS服务器

几个概念: 域名解析为IP地址:正向解析 IP地址解析为域名:反向解析 主DNS服务器:在特定区域内具有唯一性,负责维护该区域内的域名和IP地址之间的对应关系。 从DNS服务器:从服务器中获得域名和IP地址对应关系…

Android桌面图标快捷方式

一、背景 长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。 现在,长按桌面图标快捷方式已经是很成熟的功能,实现上也比较简单,主…

爆火的OpenAi的ChatGPT聊天机器人注册和使用攻略

先来看看他的效果怎木样: 哇塞!是不是很奈斯!!! 一. 对OpenAi进行注册登录(需要翻墙) OpenAI APIAn API for accessing new AI models developed by OpenAIhttps://beta.openai.com/ 二. 购买一个虚拟号码用于手机号注册 nullReceive sms online on virtual numbers of SMS…

五、卷积神经网络CNN5(图像卷积与反卷积)

图像卷积 首先给出一个输入输出结果那他是怎样计算的呢? 卷积的时候需要对卷积核进行 180 的旋转,同时卷积核中心与需计算的图像像素对齐,输出结构为中心对齐像素的一个新的像素值,计算例子如下:这样计算出左上角(即第…

[附源码]Python计算机毕业设计Django智能衣橱APP

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

一次nginx “time out”故障排查

研发请求协助排查一个nginx故障。 描述如下: 在内部环境测试没问题。 打包到生产环境后,访问nginx接口地址超时。 研发比对后怀疑是nginx版本不一致导致。内部版本1.23.2,生产环境1.23.1. 收到信息第一感觉不是nginx的问题。不过先测试一…

-aop-

文章目录一.动态代理实现invocationHandler二.AOP概述环绕通知Pointcut定义切入点一.动态代理实现invocationHandler 动态代理:可以在程序的执行过程中,创建代理对象。 通过代理对象执行方法,给目标类的方法增加额外的功能(功能增…

华硕编程竞赛11月JAVA专场 A题自由弹簧 题解

作者主页:Designer 小郑 作者简介:软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲…

Android 中的广播机制

一、Android广播概念: 在Android中,有一些操作完成以后,会发送广播,Android系统内部产生这些事件后广播这些事件,至于广播接收对象是否关心这些事件,以及它们如何处理这些事件,都由广播接收对象…

高通Ride软件开发包使用指南(2)

高通Ride软件开发包使用指南(2)3 Ubuntu系统设置3.1前提条件3.2安装Ubuntu3.3 安装 docker3.4 在Linux主机上安装QNX软件中心3 Ubuntu系统设置 以下步骤准备Ubuntu系统使用docker图像构建工具链SDK,并启用可视化。 3.1前提条件 确保您的电…

【C++ unordered_set set 和 unordered_map 和 map】

文章目录前言简单介绍哈希表,哈希结构什么时候用哈希表unordered_map操作likou第一题 两数之和unordered_set 基础操作unordered_set 实现总结前言 今天重新打开力扣,看到以前的签到题两数之和,以前的方法是双指针暴力解法,偶然看…

CMAKE编译知识

1,Ubuntu安装了cmake之后,直接输入指令查看版本。cmake -version 我这里的版本为3.16.3 2,使用visual studio里面创建一个CMake项目是最快可以看到的。但是一般无法理解。所以我找了网上资料。根据网上所说和自己再试错下。初步了解了cmake…

VMware Workstation 17.0 Pro SLIC Unlocker for Linux

VMware_Dell_2.6_BIOS-EFI64_Mod;macOS Unlocker,支持 macOS Ventura 请访问原文链接:VMware Workstation 17.0 Pro SLIC & Unlocker for Windows & Linux,查看最新版。原创作品,转载请保留出处。 作者主页&a…

了解常见的模拟器及交换机的基本配置

了解常见的模拟器及交换机的基本配置 1. 首先我们先了解常见的模拟器软件 1.Cisco Packet Tracer(简单,纯软件实现) Cisco Packet Tracer 是由Cisco公司发布的一个辅助学习工具,为学 习思科网络课程的初学者去设计、配置、排除…

【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步进步,matlab项目目标合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信息:格物致知。 更多Matlab仿真内容点击👇 智能优化算…