Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3682442

Browse files
committed
add redis rob content to the readme file
1 parent a0c3c16 commit 3682442

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

springboot-jedis-sample/README.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
### Redis原理介绍
44

5-
#### 1、Redis 性能为什么那么快?
65
##### Redis Epoll原理
76
Redis是一个单线程却性能非常好的内存数据库,主要用来作为缓存系统。Redis采用网络IO多路复用技术,保证了多个连接的时系统依然有吞吐量表现。
87

@@ -63,5 +62,25 @@ RESP底层采用TCP的连接方式,通过TCP进行传输数据,根据解析
6362

6463
------------
6564

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),陷入内核中断例程。中断例程中,内核会把触发的异常页复制一份(仅复制异常页,也就是修改的那个数据页,而不是全部数据页),于是父子进程都各自持有独立的一份数据(主进程是新的,子进程是老的)。
6685

6786

0 commit comments

Comments
 (0)