NoSql数据库Redis知识点

数据库的分类

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

Redis简介

Redis 是一个开源的、遵循 BSD 协议的、基于内存的而且目前比较流行的键值数据库 (key-value
database) ,是一个非关系型数据库, redis 提供将内存通过网络远程共享的一种服务,提供类似功能的 还有memcached ,但相比 memcached , redis 还提供了易扩展、高性能、具备数据持久性等功能。 Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛。

Redis核心特性

丰富的数据类型:Redis不仅支持基本的键值存储,还提供了字符串、列表、集合、哈希表和有序集合等数据结构。这些数据类型为开发者提供了灵活的操作能力,适应不同的应用场景。

原子性操作:Redis的所有操作都是原子性的,这意味着每个操作要么完全执行,要么完全不执行,确保了数据的一致性和完整性。

持久化机制:Redis支持将内存中的数据保存到磁盘上,以便在系统重启后恢复数据。这提供了数据安全性,防止系统故障导致的数据丢失。

发布订阅模式:Redis内置了发布/订阅模式,允许客户端之间通过消息传递进行通信,适用于消息队列和实时数据传输平台。

单线程模型:尽管Redis是单线程的,但它通过高效的事件驱动模型来处理并发请求,确保了高性能和低延迟。

主从复制:Redis支持主从复制,可以通过从节点备份数据或分担读请求,提高数据的可用性和系统的伸缩性。

Redis部署方式分类

Redis有四种主要的部署方式:单节点模式、主从模式、哨兵模式和集群模式

单节点模式

定义:单节点模式是Redis最简单的部署方式,就是在一台服务器上运行一个Redis实例,提供数据的读写服务。

优点:配置简单,操作简单,性能高,没有网络开销和数据同步的延迟。

缺点:数据容量受限于单台服务器的内存大小,无法进行横向扩展;数据安全性低,一旦服务器宕机或者数据损坏,会造成数据的丢失或不一致

主从模式

定义:主从模式是在单节点模式的基础上,增加了数据的复制功能。主从模式下,有一个主节点(master)和一个或多个从节点(slave)。主节点负责处理数据的读写操作,从节点负责复制主节点的数据,并可以提供只读服务。

优点:数据冗余,提高了数据的安全性和可靠性,可以用于数据的备份和恢复;负载均衡,分担了主节点的读压力,提高了系统的吞吐量和响应速度;故障恢复,当主节点发生故障时,可以手动或自动地将一个从节点升级为新的主节点,实现主节点的故障转移。

缺点:数据一致性不强,由于主从复制是异步的,可能会出现主从数据不一致的情况,尤其是在主节点故障时,从节点可能会丢失一部分未复制的数据;故障转移不自动,当主节点发生故障时,需要人工介入或者借助其他工具来实现从节点的自动升级,这会造成一定的服务中断和数据丢失

工作过程:

  1. 从服务器(slave)连接到主服务器(master)。
  2. 从服务器发送SYNC命令给主服务器。
  3. 主服务器执行BGSAVE命令,生成RDB文件,同时使用缓冲区记录此后执行的所有写命令。
  4. 主服务器将RDB文件发送给从服务器,从服务器接收并载入到内存中。
  5. 主服务器将缓冲区中的写命令发送给从服务器,从服务器执行这些命令。
  6. 如果有新的写命令到达主服务器,它们会被放入缓冲区等待同步。
  7. 当从服务器完成数据同步后,它会向主服务器发送一个确认消息。
  8. 主服务器收到确认消息后,将缓冲区中的写命令应用到自己的数据库中。
  9. 从服务器开始接受客户端的读请求。

哨兵模式(高可用)

定义:哨兵模式是在主从模式的基础上,引入了哨兵(sentinel)节点,用于监控主节点和从节点的运行状态,并在主节点发生故障时,自动将一个从节点升级为新的主节点,实现主节点的自动故障转移。

优点:自动故障转移,无需人工干预,减少了服务中断和数据丢失的风险;集群监控,可以实时感知主从节点的健康状况,及时发现和处理异常情况;配置中心,可以提供主节点的动态发现和通知服务,方便客户端的连接和切换。

缺点:部署复杂,需要维护额外的哨兵节点,增加了系统的管理成本;数据一致性仍然不强,由于主从复制仍然是异步的,故障转移过程中仍然可能会出现数据不一致的情况;存储能力仍然受限,由于所有的从节点都要复制主节点的全部数据,无法实现数据的分片存储,导致存储能力受限于单台服务器的内存大小。

工作过程:


每个哨兵 (Sentinel) 进程会向其它哨兵 (Sentinel) 、 Master 、 Slave 定时发送消息,以确认对方是否 " 活 "着,如果发现对方在指定配置时间( 此项可配置 ) 内未得到回应,则暂时认为对方已离线,也就是所谓的 主观认为宕机"
当 " 哨兵群 " 中的多数 Sentinel 进程在对 Master 主服务器做出 SDOWN 的判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的 Master Server 下线判断,这种方式就是" 客观宕机 "
宕机后通过一定的 vote 算法,从剩下的 slave 从服务器节点中,选一台提升为 Master 服务器节点,然后自动修改 相关配置,并开启故障转移(failover )

集群模式

定义:集群模式是Redis最高级的部署方式,它是通过分片(sharding)技术,将数据分散存储在多个节点上,每个节点都可以执行读写操作,并且每个节点都有相应的从节点,保证数据的高可用性。

优点:存储能力强,可以通过增加节点的数量,实现数据的水平扩展,突破单台服务器的内存限制;性能高,可以通过分散读写压力,提高系统的并发能力和响应速度;高可用,可以通过主从复制和故障转移,实现数据的冗余和容错,保证服务的稳定性。

缺点:部署非常复杂,需要配置多个节点的角色、槽位、复制关系等,增加了系统的管理难度;数据一致性最弱,由于数据分散在多个节点上,且主从复制和故障转移都是异步的,可能会出现数据不一致、丢失或重复的情况;功能受限,由于数据分布在不同的节点上,一些涉及多个键的操作,如事务、聚合函数、跨节点的键迁移等,都会受到限制或不支持。

Redis****的安装

rpm包安装

源码安装

1.去官方网站获取源码包并上传到目录下

2.解压源码包

3.安装一系列编译工具

4.切换目录进行编译

5.启动redis

直接启动会报错

编辑文件进行注释

再次启动

6.配置redis(vim /etc/redis/6379.conf),监听所有接口

7.重启登录redis

Redis基本操作

查看监听的网络接口和端口


写入和读取数据

设置写入数据维持时间

修改数据维持时间

查看所有key

选择数据库(redis中一共有0-15个数据库)

移动数据

改变键名

删除

清空当前库

清空所有库

Redis主从模式的搭建

1.编辑master配置文件,关闭保护模式然后重启服务


2.编辑配置文件 配置 slave节点


效果测试:

Redis****哨兵模式搭建

1.在master中复制哨兵配置文件模板过来进行配置

2.通过sed对配置文件中无用的注释和空行进行删除

3.修改配置文件

protected-mode no 关闭保护模式,允许外部客户端连接。

port 26379: 设置Sentinel监听的端口号为26379。

daemonize no: 以非守护进程模式运行。

pidfile "/var/run/redis-sentinel.pid": 指定Sentinel进程的PID文件路径。

loglevel notice: 设置日志级别为notice,记录重要的信息。

sentinel monitor mymaster 172.25.254.10 6379 2: 监控名为mymaster的主节点,主节点的IP地址为172.25.254.10,端口号为6379,需要至少2个Sentinel节点同意才判断主节点故障。

sentinel down-after-milliseconds mymaster 10000: 当主节点连续10000毫秒(10秒)没有响应时,将其标记为不可用。

sentinel parallel-syncs mymaster 1: 在故障转移过程中,最多允许1个从节点与新的主节点同步数据。

sentinel failover-timeout mymaster 180000: 故障转移超时时间为180000毫秒(180秒)。

4.将配置文件分发到另外两个节点

5.启动服务(每个节点都要开启)

测试:另起一个终端关闭master服务查看另外的两个节点是否已经发色主节点偏移

Redis集群化搭建(需六台主机)

1.删除之前三个节点的数据和redis

2.在六个节点上统一安装redis

3.编辑所有节点的配置文件

masterauth "123456":设置主节点的认证密码为"123456"。

requirepass "123456":设置客户端连接时需要提供的认证密码为"123456"。

cluster-enabled yes:启用Redis集群模式。

cluster-config-file nodes-6379.conf:指定集群配置文件名为"nodes-6379.conf"。

cluster-node-timeout 15000:设置集群节点超时时间为15000毫秒(15秒)

4.重启服务进行登陆测试

5.创建redis-cluster

相关推荐
Python私教19 分钟前
model中能定义字段声明不存储到数据库吗
数据库·oracle
BestandW1shEs3 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师3 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球3 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...3 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00013 小时前
MySQL的权限管理机制--授权表
数据库
wqq_9922502773 小时前
ssm旅游推荐系统的设计与开发
数据库·旅游
难以触及的高度4 小时前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)4 小时前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符