Redis集群技术1——nosql简述

news2024/11/15 11:37:17

一、关系型数据库和 NoSQL 数据库

1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库

关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库
中的数据主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。
NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适
用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键
值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra,HBase),每种 NoSQL 都有其特有的使用场景及优点。

1.2 为什么要使用nosql数据库呢?

在特殊场景下nosql数据库能够提供比关系型数据库更多的优势。例如:

  1. 可扩展性
    NoSQL 数据库通常设计为易于水平扩展,这意味着它们可以在分布式环境中运行,并且可以通过添加更多的节点来扩展存储容量和处理能力。相比之下,关系型数据库通常更适合垂直扩展(即通过增加单个服务器的性能来提升性能)。

  2. 高可用性和容错性
    NoSQL 数据库通常内置了数据复制和分片功能,这意味着数据可以被复制到多个节点上,从而提高了系统的可用性和容错性。即使某个节点发生故障,系统仍然可以继续工作,因为数据在其他节点上有副本。

  3. 灵活性
    NoSQL 数据库支持非结构化数据模型,这意味着它们可以轻松地处理不同类型的数据,如文档、图形、键值对等。这使得 NoSQL 数据库非常适合处理多样化的数据类型,例如 JSON 文档、图像元数据等。

  4. 性能
    NoSQL 数据库在某些类型的查询和操作上提供了更高的性能,特别是对于大量的读写操作。这是因为 NoSQL 数据库通常针对特定类型的操作进行了优化,例如,键值存储非常适合快速查找和检索数据。

  5. 易于集成
    NoSQL 数据库通常提供了丰富的客户端库和 API,使得它们更容易与其他系统和服务集成。例如,MongoDB 提供了多种语言的驱动程序,使得开发者可以轻松地在应用程序中使用 MongoDB。

  6. 实时数据处理
    NoSQL 数据库非常适合实时数据处理和分析,因为它们可以提供低延迟的数据访问。例如,Cassandra 和 Redis 等 NoSQL 数据库在实时数据流处理和缓存方面表现出色。

  7. 大规模数据存储
    对于需要存储和处理大量数据的应用程序,NoSQL 数据库提供了一种有效的解决方案。例如,HBase 和 Cassandra 可以用于存储和查询 PB 级别的数据。

  8. 地理分布
    NoSQL 数据库通常支持地理分布式的部署,这意味着数据可以在全球范围内分布存储。这对于需要在全球范围内提供低延迟服务的应用程序来说是非常重要的。

  9. 数据模型的多样性
    NoSQL 数据库支持多种数据模型,包括键值存储(如 Redis)、文档数据库(如 MongoDB)、列族存储(如 Cassandra)、图形数据库(如 Neo4j)等。每种数据模型都有其适用场景,可以根据具体需求选择合适的数据模型。

  10. 简化复杂性
    对于某些应用程序而言,使用 NoSQL 数据库可以简化数据模型和应用程序的复杂性。例如,文档数据库允许在单个文档中存储复杂的数据结构,而不需要进行复杂的规范化过程。

1.3 RDBMS和NOSQL的特点及优缺点:

在这里插入图片描述

二、什么是redis?

在这里插入图片描述

Redis (Remote Dictionary Server)
在2009年发布,开发者是意大利的萨尔瓦多·桑菲利波普(Salvatore Sanfilippo),他本想为自己的公司
开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等
Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛。

2.1 Redis特性

  1. 内存存储
    Redis 将所有数据存储在内存中,这是其高性能的关键所在。内存访问速度远高于磁盘访问速度,因此 Redis 能够提供极高的读写性能。

  2. 持久化
    尽管 Redis 主要是一个内存数据库,但它也支持数据的持久化,以防止数据丢失。Redis 提供两种持久化方式:

  • RDB (Redis Database Backup):定期生成数据快照(snapshot),将内存中的数据保存到磁盘上。
  • AOF (Append Only File):每次执行写操作时,将操作记录到一个日志文件中,该文件可以用于恢复数据。
  1. 数据结构丰富
    Redis 支持多种数据结构,包括:
  • String(字符串):最简单的键值对存储。
  • Hash(哈希):存储键值对的集合,适合存储对象。
  • List(列表):存储字符串列表,适用于消息队列。
  • Set(集合):存储不重复的元素集合。
  • Sorted Set(有序集合):存储带有分数的元素集合,可以按分数排序。
  • Stream(流):用于处理消息队列和实时数据流。
  1. 网络协议
    Redis 使用一种简单的文本协议进行通信,客户端可以通过 TCP 或 Unix socket 连接到 Redis 服务器。这种协议易于实现,并且支持多种编程语言的客户端库。

  2. 发布/订阅
    Redis 支持发布/订阅模式(Pub/Sub),允许客户端订阅频道并接收来自其他客户端发布的消息。这种功能非常适合构建消息传递系统和实时应用程序。

  3. 事务
    虽然 Redis 不支持传统的 SQL 事务,但它提供了一些事务相关的功能,如 MULTI 和 EXEC 命令,可以将一系列命令打包执行,从而实现某种形式的原子性操作。

  4. Lua 脚本
    Redis 支持 Lua 脚本,允许用户编写脚本来执行复杂的操作。Lua 脚本在 Redis 服务器端执行,可以减少网络延迟并提高性能。

  5. 主从复制
    Redis 支持主从复制,一个主节点可以有多个从节点。从节点可以作为读副本,从而实现读写分离,提高读取性能。此外,从节点还可以用于数据备份和高可用性。

  6. 集群模式
    Redis 集群支持水平扩展,通过数据分片和复制来提高性能和可靠性。集群模式可以自动重分配数据,并支持自动故障转移。

  7. 内存管理
    Redis 有多种内存管理策略,如 LRU(Least Recently Used)和 LFU(Least Frequently Used),用于在内存不足时释放不常用的键值对。

  8. 安全性
    Redis 支持密码认证和 SSL/TLS 加密,以保护数据的安全性和隐私。

  9. 模块化
    Redis 允许通过加载外部模块来扩展其功能,这使得 Redis 可以支持更多的数据类型和功能,如 Redis 搜索(RediSearch)和 Redis 图数据库(RedisGraph)。

  10. 广泛的客户端支持
    Redis 拥有各种编程语言的客户端库,几乎所有的主流编程语言都有对应的 Redis 客户端,如 Python、Java、Node.js 等。

  11. 监控和统计
    Redis 提供了丰富的监控和统计信息,可以通过命令或工具来查看服务器的状态、性能指标和使用情况。

  12. 命令丰富
    Redis 提供了大量的命令,覆盖了数据操作、事务处理、键管理等多个方面,使得 Redis 能够灵活地应用于各种场景。

在这里插入图片描述

单线程为何如此快?

  • 纯内存
  • 非阻塞
  • 避免线程切换和竞态消耗

2.2 Redis应用场景

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
  • 缓存:数据查询、电商网站商品信息、新闻内容
  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统
  • 地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

在这里插入图片描述

2.3 缓存的实现流程

数据更新操作流程

在这里插入图片描述
数据读操作流程
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌排名SEO优化#蜘蛛池软件(搜索大客户)

谷歌排名SEO优化#蜘蛛池软件(搜索大客户) 如何检测你的网站是否能被谷歌搜索引擎蜘蛛抓取 通过一个工具快速检测你的网站,是否能被谷歌搜索引擎,bing搜索引擎的蜘蛛爬取收录。网站是否能被蜘蛛抓取收录是谷歌SEO的基础&#xff0…

C_深入理解指针(五) —— sizeof和strlen的对比、数组和指针笔试题解析、指针运算笔试题解析

目录 一、sizeof和strlen的对比 1、sizeof 2、strlen 3、sizeof 和 strlen的对比 二、数组和指针笔试题解析 1、⼀维数组 重点学习代码:sizeof与一维整型数组类型 2、字符数组 代码1:sizeof与字符数组类型 代码2:strlen与字符数组类…

log4j 和 java.lang.OutOfMemoryError PermGen space

还是OneCoder在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出: java.lang.OutOfMemoryError: PermGen space 这个问题在tomcat重复热部署的时候其实比较常见。其道理也和我们沙箱的道理基本…

【重学 MySQL】十二、SQL 语言的规则与规范

【重学 MySQL】十二、SQL 语言的规则与规范 基本规则注释语法规则命名规则基本命名规则具体命名规范其他注意事项 数据导入指令 SQL(Structured Query Language,结构化查询语言)的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维…

HarmonyOS开发实战( Beta5.0)Native Drawing自绘制能力替代Canvas提升性能

简介 Canvas 画布组件是用来显示自绘内容的组件,它具有保留历史绘制内容、增量绘制的特点。Canvas 有 CanvasRenderingContext2D/OffscreenCanvasRenderingContext2D 和 DrawingRenderingContext 两套API,应用使用两套API绘制的内容都可以在绑定的 Canv…

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码,以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…

Java项目:140 springboot203医疗挂号管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 一共有管理员、挂号人员、划价人员、医生 四个角色 管理员登录进入本系统操作的功能包括对挂号人员,划价人员,患者&#xff0…

初始QT!

作业:了解QT文件夹初始代码的意义 QT core gui #QT工程所需得类库 core是核心库 gui图形化界面相关库类 greaterThan(QT_MAJOR_VERSION, 4): QT widgets #版本超过4.0会加上widgetsCONFIG c11 #该编辑器支持c11后的版本 # The following define makes you…

ngrok forward本地argocd并设置为github repo webhook

为什么需要ngrok 我们刚学了argocd的安装和部署应用,但是argocd什么时候部署部署我们的应用,就取决于repo的sync机制。我们采用以下cmd设置为autosync。 argocd app list # to get our app argocd app set argocd/tekton-learning-nginx --sync-polic…

小试牛刀-SOL链创建Token

目录 1.编写目的 2.账户结构 3.环境及使用依赖 4.步骤分解 4.1.导入相关依赖 4.2. 初始化变量 4.3. 创建并初始化Mint Account 4.4. 创建并初始化Metadata Account 4.5. 发送创建和初始化mint Account 4.6 铸造Token 5.源码分享 Welcome to Code Blocks blog 本篇文…

震惊,从仿真走向现实,3D Map最大提升超12,Cube R-CNN使用合成数据集迁移到真实数据集

震惊,从仿真走向现实,3D Map最大提升超12,Cube R-CNN使用合成数据集迁移到真实数据集 Abstract 由于摄像机视角多变和场景条件不可预测,在动态路边场景中从单目图像中准确检测三维物体仍然是一个具有挑战性的问题。本文介绍了一…

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码

基于飞桨paddle2.6.1cuda11.7paddleRS开发版的目标提取-道路数据集训练和预测代码 预测结果: 预测影像: (一)准备道路数据集 下载数据集地址: https://aistudio.baidu.com/datasetdetail/56961 mass_road.zip …

国际标准图像分辨率测试ISO12233 - 2017中文翻译

参考:https://blog.csdn.net/jgw2008/article/details/116519404?spm1035.2023.3001.6557&utm_mediumdistribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2-116519404-bbs-392397517.264^v3^pc_relevant_bbs_down_v2_default&d…

SpringBoot与Minio的极速之旅:解锁文件切片上传新境界

目录 一、前言 二、对象存储(Object Storage)介绍 (1)对象存储的特点 (2)Minio 与对象存储 (3)对象存储其他存储方式的区别 (4)对象存储的应用场景 三、…

万龙觉醒辅助:VMOS云手机助力资源采集!挂机升级!

《万龙觉醒》是一款策略型游戏,玩家需要合理规划资源采集、建筑升级、科技研发等来提升实力。在本文中,我们将为您提供一篇详细的游戏辅助攻略,并介绍如何使用VMOS云手机来提升您的游戏体验,实现24小时的自动化管理。 使用VMOS云…

R3M: A Universal Visual Representation for Robot Manipulation

R3M [25] explores how visual representations obtained by training on diverse human video data using time-contrastive learning and video-language can enable data-efficient learning(实际上就是小样本学习) of downstream robotic manipulati…

【FreeRTOS】事件组实验-改进姿态控制

目录 0 前言1 事件组实验_改进姿态控制2 改进思路2.1 创建事件2.2 等待事件2.3 设置事件2.4 Debug2.5 设置MPU6050寄存器 3 总结 0 前言 学习视频: 【FreeRTOS 入门与工程实践 --由浅入深带你学习 FreeRTOS(FreeRTOS 教程 基于 STM32,以实际项…

pdf文件怎么编辑?6个pdf编辑方法学起来(图文教程)

pdf文件怎么编辑?现今的互联网时代,我们的办公也趋向于数字化办公。PDF文件已经成为我们日常工作和学习中不可或缺的格式文件。然而,编辑PDF文档不是一件容易的事。很多人会因为编辑pdf文档感到非常苦恼,尤其是当需要对PDF进行内容…

Linux内核编程(十五)网络设备驱动

本文目录 一、常见的网络协议二、传输介质三、RJ-45接口 对于网络知识不太熟悉的同学可以查看这篇文章:计算机网络知识点详情总结。 一、常见的网络协议 TCP、UDP协议:详情查看-TCP、UDP系统编程。DNS协议:是互联网中用于将域名&#xff08…

【刷题笔记】删除并获取最大点数粉刷房子

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 题目一 题目链接&#xff1a;删除并获取最大点数 思路&#xff1a; 预处理状态表示 状态转移方程 代码如下&#xff1a; class Solution { public:int deleteAndEarn(vector<int>& nums) {int N1…