File tree Expand file tree Collapse file tree 5 files changed +64
-12
lines changed Expand file tree Collapse file tree 5 files changed +64
-12
lines changed Original file line number Diff line number Diff line change 114
114
115
115
### 八、:sunny ::umbrella ::zap : Redis 核心应用
116
116
117
- - Redis(第01篇)核心:Redis单线程模型为啥这么快?
117
+ - [ Redis(第01篇)核心:Redis单线程模型为啥这么快?] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/cache/SingleThreadModel.md )
118
118
119
- - Redis(第01篇)核心:读写分离与主从复制
119
+ - [ Redis(第01篇)核心:主从复制 ] ( https://github.com/about-cloud/JavaCore/blob/master/resource/markdown/cache/Replication.md )
120
120
- Redis(第01篇)核心:Sentinel 哨兵
121
121
- Redis(第01篇)核心:集群与分布式
122
122
- Redis(第01篇)核心:事务
Load Diff This file was deleted.
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
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
+
Original file line number Diff line number Diff line change 1
1
<h3 style =" padding-bottom :6px ; padding-left :20px ; color :#ffffff ; background-color :#E74C3C ;" >Redis单线程模型为啥这么快?</h3 >
2
2
3
- ** 1.基于内存操作:** Redis将所有需要存储的数据都存放在内存中,基于内存的随机访问速度是磁盘的10万倍左右,即使是SSD遥不可及。这是Redis操作快速的重要基础。
3
+ ![ Single] ( https://i.loli.net/2019/02/11/5c610bc32d64e.jpeg )
4
+
5
+ ** 1.基于内存操作:** Redis将所有需要存储的数据都存放在内存中,基于内存的随机访问速度是磁盘的10万倍左右,即使是SSD也遥不可及,这是Redis操作快速的重要物理基础。
4
6
5
7
6
8
7
9
** 2.C语言实现:** 相同逻辑下的C语言程序,执行效率要比其他语言的高很多。C语言与当前主流的操作系统之间有着独特的关系,抛开开发难度来看,执行速度还是蛮快的。
8
10
9
11
10
12
11
- ** 3.独特的数据结构 :**
13
+ ** 3.简单的数据结构 :** 内存数据库的另一个优点是,基于内存的数据结构要比基于硬盘的数据结构更加简单,对数据的操作也更加简单,因此Redis可以做很多事情,内部复杂性很小。Redis占用的内存空间也是比较少。
12
14
13
15
14
16
15
- ** 4.I/O多路复用模型 :**
17
+ ** 4.多路I/O复用模型 :** ** 多路 ** 指的的是多个网络连接, ** 复用 ** 指的是重复使用一个线程。I/O多路复用技术可以使单个线程处理多个网络连接请求。
16
18
17
19
18
20
19
- ** 5.单线程模型:** 线程不仅在启动和销毁的过程中消耗资源,而且多线程在上下文切换时也会消耗资源。大量的资源都消耗在不必要的“抢占”和“争夺”过程中,不利于高效率操作。单线程正是避免了这种情况
21
+ ** 5.单线程模型:** 避免了多线程的启动、销毁、上下文切换、加锁、解锁等消耗资源的操作。单线程简单,不仅能避免上下文切换这种非常消耗资源的操作,而且可以避免死锁的情况。大大提升CPU的利用率。如果是多核服务器,可以通过启动多个Redis实例来利用多个CPU。
You can’t perform that action at this time.
0 commit comments