【部署篇】Redis-01介绍‌

news2024/12/27 12:19:58

一、Redis介绍‌

1、什么是Redis?

‌Redis,英文全称是Remote Dictionary Server(远程字典服务),Redis是一个开源的、使用‌ANSI C语言编写的‌Key-Value存储系统,支持网络、可基于内存亦可持久化。‌ 它提供了多种数据结构和API,适用于缓存、NoSQL数据库等多种场景。Redis具有高性能、多种数据结构、持久化、高可用性等特点,广泛应用于互联网和大数据领域。

2、Redis的主要特性

  • 速度快‌:数据存储在内存中,可达到10万OPS。
  • 可持久化‌:所有数据保存在内存中,对数据的更新异步地保存在硬盘中。
  • 多种数据结构‌:包括String(字符串)、Hash(哈希)、List(列表)、Set(集合)、zset(有序集合)、Bitmap(位图)、HyperLogLog(基数统计、GEO(地理位置信息)等。
  • 多语言支持‌:支持‌JAVA、‌PHP、‌RUBY、‌Python等多种语言的API。
  • 功能丰富‌:包括发布订阅、Lua脚本、事务等。
  • 简单‌:源码只有23000行代码,不依赖外部库,单线程。
  • 可复制和高可用‌:支持主从同步,提供高可用性和分布式部署。

3、Redis的应用场景

  • 缓存‌:Redis常用于缓存数据库查询结果,减少数据库负载。
  • 实时数据分析‌:利用Redis的快速读写能力进行实时数据分析。
  • 消息队列‌:使用Redis的发布/订阅功能实现消息队列。
  • 会话管理‌:在Web应用中管理用户会话。
  • 排行榜‌:利用有序集合实现排行榜功能。

4、Redis的优势

  • 高性能‌:Redis以其高速读写能力在处理大量数据时表现出色。
  • 灵活性‌:支持多种数据结构和操作,适用于多种应用场景。
  • 可靠性‌:通过持久化和主从同步保证数据的安全和可靠性。
  • 易用性‌:提供多种语言的API和简单的源码,易于集成和使用。

二、部署模式

1、单机部署

1)缺点
  • 单点故障,服务不可用
  • 无法处理大量的并发数据
  • 数据无容灾易丢失
  • Redis默认单进程

2、主从模式部署

1)介绍

主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。

2)特点

主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库; - 从数据库一般是只读的,并且接收主数据库同步过来的数据; - 一个master可以拥有多个slave,但是一个slave只能对应一个master; - slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来; - master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务; - master挂了以后,不会在slave节点中重新选一个master;

3)工作机制

当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。 - 复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。

4)环境说明

至少3个节点。

3、Sentinel(哨兵)模式

1)简介

主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel模式应运而生。sentinel中文含义为哨兵,顾名思义,它的作用就是监控redis集群的运行状况

2)特点

sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义;
当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master;
当master重新启动后,它将不再是master,而是做为slave接收新的master的同步数据;
sentinel因为也是一个进程,所以有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群;
多sentinel配置的时候,sentinel之间也会自动监控;
当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中;
一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis;
sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也可能会挂掉。

3)原理图


4)工作流程
每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 命令; - 如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线; - 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每秒一次的频率确认master的确进入了主观下线状态; - 当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线; - 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令; - 当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次; - 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除。

5)环境说明

sentinel 最好跟redis部署在不同的机器上,建议至少各三个节点。

6)缺点

(1)复杂性高:Redis哨兵的部署和维护相对比较复杂,一个Redis集群通常需要至少三个哨兵节点才能正常工作,因为Redis的failover机制是基于哨兵之间的投票机制来实现的。每个哨兵节点都需要配置哨兵的角色和监控条件,这个过程需要耗费一定的时间和精力,并且在集群节点变化时还需要手动修改哨兵配置文件。除此之外,Redis哨兵还需要安装和配置多个Redis节点,每个节点都需要开放相应的端口才能完成数据通信,这也增加了配置的复杂性。
(2)可用性不稳定:Redis哨兵的故障恢复速度相对较慢,当一个主节点发生故障时,哨兵可能需要等待一段时间才能检测到,然后再进行自动故障转移,这个过程可能需要数秒到数十秒不等,导致业务中断的时间比较长。此外,当一个次级节点在进行故障切换时,还需要采取复杂的投票机制来确保数据的一致性,这也会导致故障转移的速度比较慢,对业务的影响比较大。

(3)性能损失:Redis哨兵本身也会对Redis集群的性能造成一定的影响,因为每个哨兵节点需要定期向Redis节点发送心跳包进行状态检测,这会占用部分系统资源。此外,Redis哨兵的自动故障转移也需要消耗相应的网络带宽和计算资源,会降低Redis的整体性能。

4、Cluster(集群)模式

1)简介

Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容。

2)特点

sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。
cluster可以说是sentinel+主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。
使用集群,只需要将redis配置文件中的cluster-enable配置打开即可,每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

3)原理图

可以看到,Cluster 集群模式有如下一些特点: - 多个redis节点网络互联,数据共享; - 所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用; - 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为; - 支持在线增加、删除节点; - 客户端可以连接任何一个主节点进行读写。

4)环境说明

至少三台机器,然后分别开启三个redis服务,即每个节点都要是一主两从模式。

三、核心参数

生产环境daemonize改为yes,不然我每次启动都得在redis-server命令后面加符号&,否则只要回到Linux控制台则redis服务会自动关闭,同时也将bind注释,将protected-mode设置为no。这样启动后我就可以在远程访问了。

配置项名称配置项值范围说明
daemonizeyes、noyes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行
port指定 Redis 监听端口,默认端口为 6379
bind绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-modeyes 、no保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no
timeout300当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
logleveldebug、verbose、notice、warning日志级别,默认为 notice
databases16设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompressionyes、no指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilename指定本地数据库文件名,默认值为 dump.rdb
dir指定本地数据库存放目录
requirepass设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭
maxclients0设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxmemoryXXX <bytes>指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value
save

save 900 1

save 300 10

save 60 10000

  save是用来控制Redis进行数据保存的频率,以下是配置示例说明:

  • 如果在900秒以内有1个key被改动,则进行数据保存。

  • 如果在300秒以内有10个key被改动,则进行数据保存。

  • 如果在60秒以内有10000个key被改动,则进行数据保存。

 四、可视化管理工具

RedisClient

是否收费:免费。

项目介绍:Java 编写的 Redis 连接客户端,功能丰富,并且是免费的。

支持平台:Windows。

项目地址:GitHub - caoxinyu/RedisClient: Java Redis Client GUI Tool

RedisStudio

是否收费:免费。

项目介绍:一款 C++ 编写的 Redis 管理工具,比较老,好久没更新了。

支持平台:Windows。

项目地址:GitHub - cinience/RedisStudio: RedisStudio Redis GUI client(tool) for windows

AnotherRedisDesktopManager

是否收费:免费。

项目介绍:一款基于 Node.js 开发的 Redis 桌面管理器,它的特点就是相对来说比较稳定,在数据量比较大的时候不会崩溃。

支持平台:Windows、macOS、Linux。

项目地址:github - qishibo/AnotherRedisDesktopManager

五、更多Redis文章跟篇

【部署篇】Redis-01介绍
【部署篇】Redis-02单机模式部署(源码方式安装)
【部署篇】Redis-03主从模式部署(源码方式安装)
【部署篇】Redis-04哨兵模式部署(源码方式安装)
 

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

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

相关文章

Android Compose 控件基本属性

本文的代码由上一篇文章的Demo进一步书写完成, 传送门:Android Compose的基本使用-CSDN博客 _____________________________________________________________________________ 以下代码分别列举了控件的: 内边距,外边距,内容居中,渐变自定义边框,宽度权重,string资源引用等…

走进面向对象编程的奇妙世界

在当今的编程领域&#xff0c;面向对象编程&#xff08;Object - Oriented Programming&#xff0c;简称 OOP&#xff09;犹如一颗璀璨的明星&#xff0c;照亮了软件开发的道路。 面向对象编程是一种基于对象概念的编程范式。那么&#xff0c;什么是对象呢&#xff1f;对象可以…

Windows系统C盘爆满了,如何清理?

Windows系统C盘爆满了&#xff0c;如何清理&#xff1f; 大家好&#xff0c;我是秋意零。 相信使用过Windows系统的朋友&#xff0c;都见过C盘那道靓丽的 “红色风景线” &#xff01; 我自己的Win10系统&#xff0c;已经使用了4-5年时间了。最近频频出现"红色风景线&q…

免费送源码:Java+Springboot+MySQL 水环境检测系统的设计与实现 计算机毕业设计原创定制

摘 要 在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质监测系统。近几年,无线传感器…

OpenUAV:首个专为现实无人机视觉语言导航设计的大规模轨迹数据集,由大约 12k 个轨迹组成,涵盖了多种环境和复杂的飞行动态。

2024-10-10&#xff0c;由北京航空航天大学人工智能研究所、香港中文大学MMLab以及感知与交互智能中心共同创建了OpenUAV数据集&#xff0c;首个专为现实无人机&#xff08;UAV&#xff09;视觉语言导航&#xff08;VLN&#xff09;任务设计的大型轨迹数据集&#xff0c;该数据…

java数据库操作-cnblog

创建lib目录&#xff0c;填入jar包 选择 libraries添加lib目录 package nb;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCtest {private static final String url "jdbc:mysql://localhost:3306/test?c…

ubuntu下打开摄像头

ubuntu下打开摄像头 在Ubuntu下,你可以使用cheese,这是一个开源的摄像头应用程序。如果你还没有安装它,可以通过以下命令安装: sudo apt-get updatesudo apt-get install cheese 安装完成后,你可以通过命令行启动它: cheese 或者,你也可以使用ffmpeg来打开摄像头并进…

navicate可视化数据库操作-cnblog

1 连接数据库 点击链接&#xff0c;自定义名称&#xff0c;输入root密码 2 准备按照图例创建数据库demo 3 新建数据库

使用 Visual Studio Installer Projects 打包 C# WinForms 程序的教程

前言 在开发完成一个 C# WinForms 程序后&#xff0c;打包成安装程序是发布和分发软件的重要步骤之一。通过使用 Visual Studio Installer Projects&#xff0c; 可以轻松创建一个 .exe 或 .msi 格式的安装包供用户安装。本文将详细介绍如何使用 Visual Studio Installer Proj…

springcloud之基于github webhook动态刷新服务配置

前言 在实际开发中经常会有一个叫做配置中心的服务&#xff0c;这个服务经过变更参数来动态刷新线上业务数据行为配置。比如&#xff1b;行为开关、活动数据、黑白名单、本地/预发/线上环境切换等等&#xff0c;这些配置信息往往需要在我们不重启系统的时候就可以被更新执行。那…

2.1 使用点对点信道的数据链路层

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 通信信道类型2 数据链路3 帧4 透明传输5 差错检测 前言 在计算机网络通信中&#xff0c;数据链路层起着关键作用。它为直接相连的网络设备之间提供可靠的数据传输服务。…

Mysql高级篇(下)——数据库设计范式

Mysql高级篇&#xff08;下&#xff09;——数据库设计范式 一、键和相关属性概念二、关系型数据库中常见的六种设计范式1. 第一范式&#xff08;1NF&#xff09;- 消除重复列&#xff0c;保证每列都是原子值2. 第二范式&#xff08;2NF&#xff09;- 消除部分依赖3. 第三范式&…

数据结构 ——— C语言实现带哨兵位双向循环链表

目录 前言 无哨兵位单向不循环链表的缺陷 带哨兵位双向循环链表的概念 带哨兵位双向循环链表的结构 带哨兵位双向循环链表逻辑结构示意图​编辑 实现带哨兵位双向循环链表的准备工作 实现带哨兵位双向循环链表 1. 创建新节点 2. 初始化哨兵位 3. 定义哨兵位指针 4. …

【最新华为OD机试E卷-支持在线评测】考勤信息(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

SCI论文快速排版:word模板一键复制样式和格式【重制版】

关注B站可以观看更多实战教学视频&#xff1a;hallo128的个人空间SCI论文快速排版&#xff1a;word模板一键复制样式和格式&#xff1a;视频操作视频重置版2【推荐】 SCI论文快速排版&#xff1a;word模板一键复制样式和格式【重制版】 模板与普通文档的区别 为了让读者更好地…

软考系统分析师知识点十:软件工程

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间为&#xff1a;11月9日。 倒计时&#xff1a;27天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第一阶段&#xff1a;扫平基础知识点&#xff0c;仅抽取有用信息&am…

苹果AI科学家研究证明基于LLM的模型存在缺陷 因为它们无法推理

苹果公司人工智能科学家的一篇新论文发现&#xff0c;基于大型语言模型的引擎&#xff08;如 Meta 和 OpenAI 的引擎&#xff09;仍然缺乏基本的推理能力。该小组提出了一个新的基准–GSM-Symbolic&#xff0c;以帮助其他人衡量各种大型语言模型&#xff08;LLM&#xff09;的推…

【C++贪心 DFS】2673. 使二叉树所有路径值相等的最小代价|1917

本文涉及知识点 C贪心 反证法 决策包容性 CDFS LeetCode2673. 使二叉树所有路径值相等的最小代价 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子…

QD1-P7 HTML 容器和布局标签(div、span)

本节学习&#xff1a;div 和 span 标签。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p7 ‍ 一、div 标签 用途 ​<div>​ 标签在 HTML 中是一个通用容器&#xff0c;用于将 HTML 文档中的内容分组并在文档中划分区域。<div>​ ​元素本身不具有特定的含…

深入探索Spring Cloud Gateway:微服务网关的最佳实践

优质博文&#xff1a;IT-BLOG-CN Spring Cloud Gateway作为Spring Cloud框架的第二代网关&#xff0c;在功能上要比Zuul更加的强大&#xff0c;性能也更好。随着Spring Cloud的版本迭代&#xff0c;Spring Cloud官方有打算弃用Zuul的意思。在笔者调用了Spring Cloud Gateway的…