File tree 1 file changed +20
-1
lines changed
1 file changed +20
-1
lines changed Original file line number Diff line number Diff line change 2
2
3
3
### Redis原理介绍
4
4
5
- #### 1、Redis 性能为什么那么快?
6
5
##### Redis Epoll原理
7
6
Redis是一个单线程却性能非常好的内存数据库,主要用来作为缓存系统。Redis采用网络IO多路复用技术,保证了多个连接的时系统依然有吞吐量表现。
8
7
@@ -63,5 +62,25 @@ RESP底层采用TCP的连接方式,通过TCP进行传输数据,根据解析
63
62
64
63
------------
65
64
65
+ ##### Redis持久化
66
+ 持久化的作用,当Redis服务宕机或异常崩溃时,可以通过持久化文件进行数据恢复。
67
+
68
+ ##### 1、RDB
69
+ 把当前数据生成快照,保存到磁盘上,rdb持久化可以手动触发,也可以自动触发
70
+
71
+ ** RDB手动触发命令:**
72
+ > - save命令:执行save命令会手动触发RDB持久化,但是save命令会阻塞Redis服务,因为save是使用Redis主进程完成,直到rdb持久化完成,Redis才能继续提供服务。当数据量大时,阻塞时间越长,此时是不能提供服务的,不建议使用;
73
+ > - bgsave命令:执行bgsave命令也会触发RDB持久化,和save命令不同的是,采用fork + copy on write的方式,持久化由fork出的子进程完成,Redis主进程只阻塞fork阶段,时间较短;
74
+
75
+ ** RDB自动触发机制:**
76
+ Redis自动触发都使用bgsave机制完成
77
+ > - 在redis配置文件中设置save相关配置,如save m n,它表示在m秒内被修改n次时,自动触发bgsave操作。
78
+
79
+ ** Redis中的fork():**
80
+ Redis巧妙的运用了fork,当bgsave执行时,Redis主进程会判断当前是否有fork出来的子进程,若有则忽略不执行,若没有则fork出一个子进程来执行rdb文件持久化工作,子进程与主进程共享一份内存空间,由子进程做持久化,主进程又能继续对外的服务,二者互不影响。
81
+
82
+ ** copy on write机制:**
83
+ 子进程持久话的数据是在fork时的数据,也就是说主进程和子进程都是同一块内存空间,之后主进程又能继续提供服务,当遇到内存数据修改时,需要保证子进程对修改数据不可见的, 这个机制就是由copy on wirte完成的。
84
+ 原理:主进程fork子进程后,内核把主进程中所有的内存页权限都设置为read-only,然后子进程的地址空间指向主进程。这也就是共享了主进程的内存,当其中主进程写内存时,CPU硬件会检测到内存页权限是read-only的,于是触发内存页中断(page-dault),陷入内核中断例程。中断例程中,内核会把触发的异常页复制一份(仅复制异常页,也就是修改的那个数据页,而不是全部数据页),于是父子进程都各自持有独立的一份数据(主进程是新的,子进程是老的)。
66
85
67
86
You can’t perform that action at this time.
0 commit comments