数据库的分类
关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库
中的数据主流的 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)。主节点负责处理数据的读写操作,从节点负责复制主节点的数据,并可以提供只读服务。
优点:数据冗余,提高了数据的安全性和可靠性,可以用于数据的备份和恢复;负载均衡,分担了主节点的读压力,提高了系统的吞吐量和响应速度;故障恢复,当主节点发生故障时,可以手动或自动地将一个从节点升级为新的主节点,实现主节点的故障转移。
缺点:数据一致性不强,由于主从复制是异步的,可能会出现主从数据不一致的情况,尤其是在主节点故障时,从节点可能会丢失一部分未复制的数据;故障转移不自动,当主节点发生故障时,需要人工介入或者借助其他工具来实现从节点的自动升级,这会造成一定的服务中断和数据丢失
工作过程:
- 从服务器(slave)连接到主服务器(master)。
- 从服务器发送
SYNC
命令给主服务器。 - 主服务器执行
BGSAVE
命令,生成RDB文件,同时使用缓冲区记录此后执行的所有写命令。 - 主服务器将RDB文件发送给从服务器,从服务器接收并载入到内存中。
- 主服务器将缓冲区中的写命令发送给从服务器,从服务器执行这些命令。
- 如果有新的写命令到达主服务器,它们会被放入缓冲区等待同步。
- 当从服务器完成数据同步后,它会向主服务器发送一个确认消息。
- 主服务器收到确认消息后,将缓冲区中的写命令应用到自己的数据库中。
- 从服务器开始接受客户端的读请求。
哨兵模式(高可用)
定义:哨兵模式是在主从模式的基础上,引入了哨兵(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