一、关系数据库和Nosql数据库
关系数据库
- 定义:关系数据库是建立在关系模型基础上的数据库。它使用表格(关系)来存储数据,通过行和列的形式组织信息。例如,一个简单的学生信息表可能有 "学号""姓名""年龄""班级" 等列,每一行代表一个学生的具体信息。
- NoSQL 数据库
- 定义:NoSQL(Not Only SQL)数据库是一种非关系型数据库,它不依赖于传统的关系模型和 SQL 语言来处理数据。NoSQL 数据库主要用于处理大规模、高并发、分布式的数据存储和访问需求。
|--------|--------------------------------------------------|----------------------------------------------------------------------------|
| 比较项目 | 关系数据库 | NoSQL 数据库 |
| 数据模型 | 以表格形式组织数据,通过行和列存储,有主键和外键来维护关系 | 多种模型,包括键 - 值存储、文档存储、列族存储、图形存储等 |
| 数据操作语言 | 使用 SQL 进行数据定义、查询、更新和删除操作 | 没有统一标准语言,不同类型的 NoSQL 数据库有各自的查询语言,如 MongoDB 的类似 JSON 的语法、Neo4j 的 Cypher 语言等 |
| 数据一致性 | 通过事务处理机制保证强一致性,严格的事务保证一组操作要么全部成功要么全部失败 | 部分 NoSQL 数据库为了高可用性和高性能可能会牺牲一定的数据一致性,数据更新可能不会立即在所有节点同步 |
| 数据完整性 | 有成熟的完整性约束,如主键约束、外键约束、非空约束等确保数据质量 | 完整性约束相对较弱,不过部分数据库也有自己的验证机制 |
| 扩展性 | 在处理大规模、高并发数据时可能出现性能瓶颈,扩展相对复杂 | 具有高可扩展性,能通过添加服务器节点轻松扩展存储和处理能力,适合处理海量数据 |
| 性能和并发 | 在复杂查询和关联操作方面有优势,但在高并发读写场景下可能性能下降 | 高性能和高并发,简单的数据结构(如键 - 值存储)能快速处理读写操作,适用于缓存等场景 |
| 数据灵活性 | 数据模型相对固定,对于复杂的非结构化数据处理较困难 | 灵活的数据模型,能适应结构化、半结构化和非结构化数据,如文档存储可灵活处理各种内容 |
| 技术成熟度 | 有大量成熟的数据库管理系统,如 Oracle、MySQL、SQL Server 等,工具支持丰富 | 技术不断发展,部分 NoSQL 数据库相对较新,生态系统和工具支持在不断完善中 |
| 典型应用场景 | 适合数据一致性要求高、事务处理频繁的系统,如银行系统、企业资源规划(ERP)系统 | 适合大数据、高并发、分布式存储场景,如物联网系统、社交媒体平台、缓存系统等 |
二、Remote Dictionary Server
1.什么是redis
Redis(Remote Dictionary Server)是一个开源的、高性能的键 - 值(key - value)存储数据库,通常被归类为 NoSQL 数据库。
2.redis特性
- 速度极快:Redis 将数据存储在内存中,内存的读写速度比磁盘快得多。这使得 Redis 能够在极短的时间内处理大量的读写请求。例如,在一个高并发的电商系统中,Redis 可以快速地查询商品库存信息,响应时间可以达到亚毫秒级。
- 单线程架构(主要部分):Redis 的核心部分是单线程的,这避免了多线程的上下文切换成本。它通过高效的事件循环(I/O 多路复用)机制来处理多个客户端的请求。例如,即使有数千个客户端同时向 Redis 发送请求,它也能高效地处理,不会因为线程切换而导致性能下,
3.应用场景
- 缓存:这是 Redis 最常见的应用场景之一。可以将经常访问的数据(如数据库查询结果、网页内容等)存储在 Redis 中。当客户端再次请求相同的数据时,直接从 Redis 中获取,而不是从较慢的数据源(如数据库或文件系统)中获取,大大提高了系统的响应速度。例如,一个新闻网站可以将热门新闻文章的内容缓存到 Redis 中。
- 消息队列:利用 Redis 的列表(List)数据结构可以实现简单的消息队列。生产者将消息添加到列表的一端,消费者从列表的另一端取出消息进行处理。例如,在一个分布式系统中,不同模块之间的异步通信可以通过 Redis 消息队列来实现。
- 计数器:可以使用 Redis 的原子操作来实现计数器功能。例如,统计网站的访问次数、文章的点赞数等。由于 Redis 的操作是原子性的,所以在高并发环境下也能保证计数的准确性。
- 排行榜:通过有序集合(Sorted Set)可以轻松地实现排行榜功能。例如,游戏中的玩家分数排行榜、电商平台的商品销量排行榜等,能够快速地更新排名并查询排名信息。
三、Redis安装
3.1 rpm包安装
dnf install redis -y
3.2源码安装
安装编译工具
执行编译命令
启动redis
编辑配置文件
其他主机安装
四、redis的主从复制
4.1 环境配置
R2 master
R1 slave
R3 slave
4.2 配置主从同步
1.修改master节点的配置文件
2.配置slave节点
3.测试
master
slave
五、redis哨兵
5.1什么是 Redis 哨兵(Sentinel)
- Redis 哨兵是 Redis 高可用性(HA)解决方案的一个重要组件。它主要用于监控 Redis 主从节点的状态,在主节点出现故障时自动进行故障转移,将从节点提升为新的主节点,从而保证 Redis 服务的持续可用性。
5.2工作原理
- 监控(Monitoring) :
- 哨兵会定期(默认每 1 秒)向 Redis 主节点、从节点发送心跳(PING)命令,来检查它们是否正常运行。如果在配置的时间范围内(如 down - after - milliseconds 参数指定的时间)没有收到节点的有效响应,就会将该节点标记为 "主观下线(Subjectively Down,SDOWN)"。
- 通知(Notification) :
- 当一个哨兵将某个节点标记为 SDOWN 后,它会向其他哨兵发送消息,告知该节点可能出现故障。当多个(根据配置的 quorum 参数,例如多数派)哨兵都认为一个主节点下线时,这个主节点就会被标记为 "客观下线(Objectively Down,ODOWN)"。
- 故障转移(Failover) :
- 一旦主节点被标记为 ODOWN,哨兵们就会协商选举出一个哨兵来执行故障转移操作。这个当选的哨兵会从存活的从节点中选择一个合适的节点,将其提升为新的主节点。然后它会通知其他从节点,让它们成为新主节点的从节点,并且更新相关的配置。
- 配置提供者(Configuration Provider) :
- 哨兵会自动发现 Redis 的主从节点,并维护一个关于它们的配置信息列表。客户端可以连接到哨兵来获取当前 Redis 主节点的地址等配置信息,这样客户端就不需要手动维护主节点的信息,并且在主节点发生故障转移后,能够自动更新连接的主节点
5.3哨兵实验过程
master节点
slave
启动
六、Redis Cluster
6.1部署redis cluster
在所有主机中
yum install redis -y
vim /etc/redis/redis.conf
6.2创建redis-cluster
测试
写动作到了第二个master里面
120主机可以写
6.3集群扩容
现在是三组三从
将124添加到120的集群中
但没槽位不能存数据
分享槽位
添加slave
6.4删除主机
1。
2。