nosql数据库 redis

news2024/11/19 15:38:46

一、介绍

1、redis与mysql的区别:

Redis是一种基于键值对的内存数据库,数据存储在内存中,因此读写速度非常快。它支持多种数据结构,如字符串、哈希、列表等。

MySQL是一种关系型数据库,数据以表格的形式组织存储在磁盘上,通过SQL查询语言进行操作。

2、redis持久化存储化的方式:

RDB (Redis DataBase):

在指定的时间间隔内生成数据的快照,并将快照保存到一个以.rdb为后缀的文件中,存储到磁盘上。默认开启,故障点到上一次备份之间的数据无备份

AOF (Append Only File):

以追加日志的方式记录 redis 服务器接收到的每个写操作,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复。默认关闭,完整记录数据的操作指令。

3、安装:

源码:Index of /releases/

解压 Redis 源码安装包:tar -zxvf redis-5.0.0.tar.gz

进入 Redis 目录:cd redis

编译(编译前确认操作系统已经安装 gcc)如果没有安装 gcc 会报错,重新编译前需要运行:make && make install

二、redis 主从复制的实现

1、redis主从复制原理:

Redis主从复制是一种在多个Redis节点之间同步数据的机制,旨在实现数据冗余、故障恢复、负载均衡和读写分离。通过主从复制,可以在一个主节点(Master)和一个或多个从节点(Slave)组成的集群中,确保数据的一致性和系统的高可用性。

● 步骤:

① 连接与同步请求:从节点(Slave)主动与主节点(Master)建立网络连接,发送SYNC 命令,请求复制主节点的数据。

② 主节点快照:接收到同步请求后,主节点执行后台保存操作(BGSAVE),生成当前数据集的快照(RDB文件),将生成的RDB文件发送给从节点。

③ 从节点加载与重放:从节点接收并载入RDB文件,然后按照接收到的命令流顺序执行这些写操作,使得自身数据状态与主节点在快照时刻一致。

④ 增量复制:全量同步完成后,主节点持续将后续接收到的所有写命令发送给从节点。从节点实时接收并执行这些命令,保持与主节点数据的实时同步。

⑤ 心跳检测与故障恢复:从节点周期性地向主节点发送心跳(PING)以维持连接并检查主节点状态。

2、主从复制配置:

(1) 环境:
redis master:10.1.1.100

redis slave1:10.1.1.60

redis slave2:10.1.1.80

(2) 修改配置文件:

① 配置监听地址:

在所有机器上配置监听各种的ip地址:
vim /root/redis/redis.conf

bind IP #监听地址(各自写各自的IP)

daemonize yes #后台守护进程运行

② 开启从配置:

从节点上配置主节点的ip地址和端口号

(3) 查询并测试:

① 三台集机器开启redis:

cd redis

redis-server redis.conf

② 登录主服务器查看主从关系:

③ 验证主从同步:

在主节点上添加一个key,从节点上能够查询到该key的value。

三、Sentinel(哨兵)实现Redis的高可用性

1、原理:

Sentinel(哨兵)是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

● 基本原理是:心跳机制+投票裁决:

① 心跳机制(Heartbeat):Sentinel节点通过定期发送心跳(PING)命令来检测Redis主节点和从节点的运行状态。

② 主观下线(Subjective Down):当一个Sentinel节点在一定时间内未收到某个节点(主节点或从节点)的响应时,它会将该节点标记为“主观下线”(SDOWN)。

③ 客观下线(Objective Down):当多个Sentinel节点都报告同一个节点为“主观下线”时,该节点就被确定为“客观下线”(ODOWN)。

④ 投票裁决(Agreement Protocols):在主节点被判定为客观下线后,Sentinel节点之间需要通过投票来决定是否执行故障转移(failover)操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让其他从服务器复制新的主服务器。

2、流程图:

① 正常的主从服务:

② sentinel 监控到主redis 下线:

③ 由优先级升级新主:

④ 旧主修复,作为从redis,新主照常工作:

3、sentinel 配置:

(1) 在每台机器上配置sentinel:

在主节点上配置sentinel哨兵,只需指定主机器的IP,等sentinel 服务开启,它能自己查询到主上的从redis。

cd redis

vim sentinel.conf

port 26379 #Redis Sentinel监听端口为26379,为了避免与Redis服务本身使用的默认端口(6379)冲突。

daemonize yes

sentinel monitor mymaster 10.1.1.100 6379 1 #指定主redis和投票裁决的机器数,即至少有1个sentinel节点同时判定主节点故障时,才认为其真的故障

sentinel down-after-milliseconds mymaster 30000 #如果联系不到节点30000毫秒,我们就认为此节点下线。

sentinel failover-timeout mymaster 180000 #设定转移主节点的目标节点的超时时长。

(2) 从节点指定优先级:

vim redis.conf

replica-priority 100

#复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;当优先级一样时,随机选举。

(3) 每台机器开启sentinel服务:

./src/redis-sentinel sentinel.conf

查看当前的主节点:

(4) 模拟主master-redis 故障:

查看新的主节点:

旧的主节点恢复后,自动变为从节点,直到新的主节点故障后再重新选举主节点。

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

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

相关文章

linux-进程(2)

1.通过系统调用获取进程标示符 进程id(PID) 父进程id(PPID) 每一个可执行程序运行起来之后都会成为一个进程,每个进程都有一个自己的id,以及一个父进程id,父进程就是创建自己进程的进程&#xf…

玩转nginx的配置文件3

1. limit_req_zone配置限流 limit_req_zone $binary_remote_addr zonemylimit:10m rate10r/s;upstream myweb {server 10.0.105.196:80 weight1 max_fails1 fail_timeout1;}server {listen 80;server_name localhost;location /login {limit_req zonemylimit;proxy_pass http:…

C++/QT + Mysql + Tcp 企业协作管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 1、项目概要:C/S架构、数据库Mysql、C、QT;支持实时通信、局域网内通信,可多个客户端同时登录; 2、(Server)管理端:用户管理、…

详解js中的console对象

对于前端开发而言,console对象大家肯定都很熟悉,最常用的 console.log() 是开发调试必用的 但是对于console对象的其他方法,相对而言使用的就比较少了。下面详细介绍一下: 谷歌浏览器输出console对象: 值得一提的是不…

2018-2023年上市公司富时罗素ESG评分数据

2018-2023年上市公司富时罗素ESG评分数据 1、时间:2018-2023年 2、来源:整理自WIND 3、指标:证券代码、简称、ESG评分 4、范围:上市公司 5、指标解释: 富时罗素将公司绿色收入的界定和计算作为公司ESG 评级打分结…

Windows批处理脚本,用于管理Nginx服务器

先看截图: Windows批处理脚本,用于管理Nginx服务器。它提供了启动、重启、关闭Nginx以及刷新控制台等功能。 设置环境变量: set NGINX_PATHD::设置Nginx所在的盘符为D盘。set NGINX_DIRD:\nginx1912\:设置Nginx所在…

以太网ARP协议解析

一、什么是ARP协议 ARP协议,全称是Address Resolution Protocol,即地址解析协议。 ARP协议的作用,就是在已知目标设备的IP地址但是不知道其MAC地址的时候,根据IP地址,获取到其MAC地址,以便组成完整的IP包进…

profinet协议基础

文章目录 工业以太网自动化通讯金字塔工业以太网技术比较 profinet概述profinet特性 EtherNet通信EtherCAT通信EtherCat特性EtherCat过程同步 工业以太网 工业以太网是基于IEEE 802.3 (Ethernet)的强大的区域和单元网络。 自动化通讯金字塔 各个组织与工业以太网 工业以太网…

2024.4.25

#include <iostream> #include <iomanip> using namespace std; class Person{const string name;int age;char sex; public:Person(const string name):name(name){cout << "第一个Person构造函数" << endl;}Person():name("zhangsan&…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点&#xff1a;判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;起点是root&#xff0c;终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式&#xff0c;从根节点从根到 叶子不断对路径进行加…

javaSE(九):线程

目录 一、程序,进程,线程 1.概念 2.三者之间的关系&#xff1a; 二、创建线程 ①继承Thread类的方式 ②实现Runnable接口的方式 三、Thread类中方法 1.常用方法 2.线程优先级 四、线程状态 ①线程在它的生命周期中会处于不同的状态 ②线程的状态 五、多线程 1.概念…

君正X2100 RTOS 固件升级

使用cloner工具烧写固件需要在上电之前让boot_sel[2:0]处于boot from USB模式&#xff0c;但是电路板装在机壳内部后不方便改变boot_sel[2:0]的状态&#xff0c;如果要升级固件&#xff0c;需要通过机壳留出的USB口、网口、或者无线网络进行固件更新。 一、升级方案 1、固件分…

vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计

Versal 串行 I/O 硬件调试流程 Versal ™ ACAP 无需再生成 IBERT IP &#xff0c; 因为使用系统内串行 I/O 调试所需的必要逻辑现已集成到 GTY 收发器架构内。使 用 GTY 收发器的任何设计均可用于串行 I/O 硬件调试。 Versal 串行 I/O 硬件调试流程具有 2 个不同阶…

10.JAVAEE之网络编程

1.网络编程 通过网络,让两个主机之间能够进行通信 >基于这样的通信来完成一定的功能进行网络编程的时候,需要操作系统给咱们提供一组 AP1, 通过这些 API才能完成编程&#xff08;API 可以认为是 应用层 和 传输层 之间交互的路径&#xff09;&#xff08;API:Socket API相当…

【Qt常用控件】—— QWidget 核心属性

目录 &#xff08;一&#xff09;控件概述 1.1 关于控件体系的发展 &#xff08;二&#xff09;QWidget 核心属性 2.1 核心属性概览 2.2 enabled 2.3 geometry 2.4 windowTitle 2.5 windowIcon 2.6 windowOpacity 2.7 cursor 2.8 font 2.9 toolTip 2.10 focus…

java的ArrayList LinkedList的操作

文章目录 ArrayList1. ArrayList集合的特点2. 操作 LinkedList1. LinkedList集合的特点2. 操作 参考链接 ArrayList 1. ArrayList集合的特点 2. 操作 add(Object element) 向列表的尾部添加指定的元素。size() 返回列表中的元素个数。get(int index) 返回列表中指定位置的元素…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type&#xff1a;忽略类型&#xff0c;也即忽略规则&#xff0c;如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s)&#xff1a;仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型&#xff0c;比如.txt后…

MATLAB循环语句

MATLAB 循环语句 在某些情况下&#xff0c;您需要多次执行一个代码块。通常&#xff0c;语句是按顺序执行的。首先执行函数中的第一条语句&#xff0c;然后执行第二条&#xff0c;依此类推。 编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。 循环语句允许我们…

把 KubeBlocks 跑在 Kata 上,真的可行吗?

背景 容器的安全性一直是广受关注的话题。这个领域也产生了很多不错的开源项目。Kata就是其中之一。 Kata Containers&#xff08;简称 Kata&#xff09;是一种开源项目&#xff0c;它提供了一种安全而高性能的容器运行时环境。Kata Containers 利用虚拟化技术&#xff08;通常…

【深度学习实战(24)】如何实现“断点续训”?

一、什么是断点续训&#xff1a; 中断的地方&#xff0c;继续训练。与加载预训练权重有什么区别呢&#xff1f;区别在于优化器参数和学习率变了。 二、如何实现“断点续训” 我们需要使用checkpoint方法保存&#xff0c;模型权重&#xff0c;优化器权重&#xff0c;训练轮数…