Skip to content

Commit 7fbbfe5

Browse files
author
代码风水师
committed
添加了Redis主从复制上半篇文章
1 parent 73f7b5f commit 7fbbfe5

File tree

5 files changed

+64
-12
lines changed

5 files changed

+64
-12
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,9 @@
114114

115115
### 八、:sunny::umbrella::zap:Redis 核心应用
116116

117-
- Redis(第01篇)核心:Redis单线程模型为啥这么快?
117+
- [Redis(第01篇)核心:Redis单线程模型为啥这么快?](https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/cache/SingleThreadModel.md)
118118

119-
- Redis(第01篇)核心:读写分离与主从复制
119+
- [Redis(第01篇)核心:主从复制](https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/cache/Replication.md)
120120
- Redis(第01篇)核心:Sentinel 哨兵
121121
- Redis(第01篇)核心:集群与分布式
122122
- Redis(第01篇)核心:事务

resource/markdown/cache/DataStructure.md

Lines changed: 0 additions & 2 deletions
This file was deleted.

resource/markdown/cache/RedisDataStructure.md

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<h3 style="padding-bottom:6px; padding-left:20px; color:#ffffff; background-color:#E74C3C;">主从复制</h3>
2+
3+
**数据复制的意义:** 1、读写分离,降低单节点的读写压力;2、容灾转移,单机出现问题,从节点接替。
4+
5+
Redis 数据复制是单向的,而且一个节点从属一个master节点。
6+
7+
8+
9+
设置主从复制方式一: redis实例启动前,在配置文件中设置 `slaveof host port`
10+
11+
设置主从复制方式二: redis实例启动时,使用 `redis-server` 加上 `--slaveof host port`
12+
13+
设置主从复制方式三:redis实例启动后,在命令行设置 `slaveof host port`
14+
15+
断开主从复制:在从节点命令行执行 `slaveof no one`
16+
17+
18+
19+
#### 一主一从:
20+
21+
![一主一从](https://i.loli.net/2019/02/11/5c612b5f58ffc.png)
22+
23+
常规的主从配置,一个主节点配置一个从节点。
24+
25+
作主备容灾转移时,主节点负责读写,从节点负责复制数据,一旦主节点宕机,从节点晋升为主节点,接替读写工作;
26+
27+
做读写分离时,主节点只写,从节点只读。
28+
29+
注意,节点最好要开启持久化,否则Redis实例宕机重启后,数据变空。
30+
31+
32+
33+
#### 一主多从:
34+
35+
![一主多从](https://i.loli.net/2019/02/11/5c612ba97b585.png)
36+
37+
根据“二八原则”,大部分场景下都是在读操作,通常给主节点配置多个从节点,主节点只写,从节点只读,从节点间分摊压力。
38+
39+
40+
41+
#### 树状主从:
42+
43+
![树状主从](https://i.loli.net/2019/02/11/5c612bbf22aea.png)
44+
45+
但是从节点过多,主节点的IO就越大(主要是IO中的O),这时就会出现IO堵塞。使用树状主从结构,每个主节点的从节点数量就变少,这样主节点的IO输出压力就会变小,非叶子节点的主节点层层分担压力,从而降低根节点的压力。
46+
47+
(为了能够校正数据,不推荐将从节点设置为只读模式 ~~slave-read-only=yes~~)
48+
49+
50+
51+
---
52+
53+
<h3 style="padding-bottom:6px; padding-left:20px; color:#ffffff; background-color:#E74C3C;">复制原理</h3>
54+
55+
![Redis注册复制原理](https://i.loli.net/2019/02/11/5c6147b3de702.png)
56+
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
<h3 style="padding-bottom:6px; padding-left:20px; color:#ffffff; background-color:#E74C3C;">Redis单线程模型为啥这么快?</h3>
22

3-
**1.基于内存操作:** Redis将所有需要存储的数据都存放在内存中,基于内存的随机访问速度是磁盘的10万倍左右,即使是SSD遥不可及。这是Redis操作快速的重要基础。
3+
![Single](https://i.loli.net/2019/02/11/5c610bc32d64e.jpeg)
4+
5+
**1.基于内存操作:** Redis将所有需要存储的数据都存放在内存中,基于内存的随机访问速度是磁盘的10万倍左右,即使是SSD也遥不可及,这是Redis操作快速的重要物理基础。
46

57

68

79
**2.C语言实现:** 相同逻辑下的C语言程序,执行效率要比其他语言的高很多。C语言与当前主流的操作系统之间有着独特的关系,抛开开发难度来看,执行速度还是蛮快的。
810

911

1012

11-
**3.独特的数据结构:**
13+
**3.简单的数据结构:** 内存数据库的另一个优点是,基于内存的数据结构要比基于硬盘的数据结构更加简单,对数据的操作也更加简单,因此Redis可以做很多事情,内部复杂性很小。Redis占用的内存空间也是比较少。
1214

1315

1416

15-
**4.I/O多路复用模型:**
17+
**4.多路I/O复用模型:** **多路** 指的的是多个网络连接,**复用** 指的是重复使用一个线程。I/O多路复用技术可以使单个线程处理多个网络连接请求。
1618

1719

1820

19-
**5.单线程模型:** 线程不仅在启动和销毁的过程中消耗资源,而且多线程在上下文切换时也会消耗资源。大量的资源都消耗在不必要的“抢占”和“争夺”过程中,不利于高效率操作。单线程正是避免了这种情况
21+
**5.单线程模型:** 避免了多线程的启动、销毁、上下文切换、加锁、解锁等消耗资源的操作。单线程简单,不仅能避免上下文切换这种非常消耗资源的操作,而且可以避免死锁的情况。大大提升CPU的利用率。如果是多核服务器,可以通过启动多个Redis实例来利用多个CPU。

0 commit comments

Comments
 (0)