redis 스냅 샷 모드동력 노드 자바 대학 정리

우 리 는 redis 가 지구 화 라 는 능력 을 가지 고 있다 는 것 을 알 고 있 습 니 다.도대체 어디 까지 지속 되 고 어떻게 지속 되 는 것 입 니까?이 편 은 우리 가 함께 답 을 찾 아 보 자.
스냅 샷 모드
Redis 를 사용 할 때 redis 는 두 가지 지구 화 모델 이 있다 고 들 었 을 지도 모른다.첫 번 째 는 SNAPSHOTTING 모델 이 고 AOF 모델 이 며 실전 장면 에서 가장 많이 사용 하 는 것 은 SNAPSHOTTING 모델 이다.이것 은 반박 할 필요 가 없다.그리고 SNAPSHOTTING 모델 을 사용 하려 면 redis.conf 에 설정 파 라 메 터 를 설정 해 야 한 다 는 것 도 알 고 있 을 것 이다.예 를 들 어 다음 과 같다.

# Save the DB on disk:
#
# save <seconds> <changes>
#
# Will save the DB if both the given number of seconds and the given
# number of write operations against the DB occurred.
#
# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed
#
# Note: you can disable saving completely by commenting out all "save" lines.
#
# It is also possible to remove all the previously configured save
# points by adding a save directive with a single empty string argument
# like in the following example:
#
# save ""

save 900 1
save 300 10
save 60 10000

위의 세 조 의 명령 도 매우 이해 하기 쉽다.즉,900 은'초 수'를 가리 키 고,1 은'change 횟수'를 가리킨다.그 다음 에'900 s'안에 한 번 의 변경 이 있 으 면 save 저장 을 실행한다.같은 이치 이다.만약 에 300 s 안에 10 번 의 change 가 있 고,60s 안에 1w 의 change 가 있다 면 save 조작 도 실행한다.이렇게 간단 하 다.내 가 방금 한 몇 마디 를 보면,직감 이 있 는 거 아니 야?
너 에 게 두 가지 문제 가 있 는데,분명하게 해 야 하 는 것 이 아니 냐 고 말 해라.
1.위의 이 조작 은 redis 자체 가 실시 하 는 동기 화 작업 이 어야 합 니 다.save 를 수 동 으로 실행 할 수 있 습 니까? 
물론 수 동 으로 조작 할 수 있 습 니 다.redis 는 두 가지 조작 명령 을 제공 합 니 다.save,bgsave,이 두 명령 은 모두 데 이 터 를 하 드 디스크 에 강제로 리 셋 합 니 다.다음 그림:

2.위의 그림 을 보면 bgsave 가 단독 스 레 드 를 여 는 것 같 습 니 다.그렇습니까?
확실히 당신 이 말 한 바 와 같이 bgsave 는 차 스 레 드 를 열 어 데이터 리 셋 을 하 는 것 입 니 다.믿 지 않 으 면 코드 를 보 겠 습 니 다.코드 는 rdb.c 소스 파일 에 있 습 니 다.다음 과 같 습 니 다.

위의 코드 에서 중요 한 것 을 보 았 습 니까?그것 은 바로 fork 방법 입 니 다.그것 은 바로 일부 소 인구 에서 말 하 는 fork 에서 하나의 스 레 드 를 만 드 는 것 입 니 다.오늘 도 드디어 보 았 습 니 다.사실은 redis 는 단순 한 단일 스 레 드 서비스 가 아 닙 니 다.적어도 fork 는 우리 에 게 일부 장면 에서 도 작업 스 레 드 를 열 것 이 라 고 알려 주 었 습 니 다.그리고 코드 가 작업 스 레 드 에서 동기 화 된 bgsave 작업 을 수행 하 는 것 을 볼 수 있 습 니 다.이렇게 간단 합 니 다.
3.saveparams 매개 변수 가 redis 소스 코드 에서 의 논 리 를 간단하게 말 할 수 있 습 니까?
네,사실은 redis 에 주기 적 인 함수 가 있 습 니 다.server Cron 이 라 고 합 니 다.주기 적 으로 작 동 되 고 7 가지 일 을 할 수 있 습 니 다.예 를 들 어 redis 주석 에서 말 한 것 처럼:

/* This is our timer interrupt, called server.hz times per second.
 * Here is where we do a number of things that need to be done asynchronously.
 * For instance:
 *
 * - Active expired keys collection (it is also performed in a lazy way on
 * lookup).
 * - Software watchdog.
 * - Update some statistic.
 * - Incremental rehashing of the DBs hash tables.
 * - Triggering BGSAVE / AOF rewrite, and handling of terminated children.
 * - Clients timeout of different kinds.
 * - Replication reconnection.
 * - Many more...
 *
 * Everything directly called here will be called server.hz times per second,
 * so in order to throttle execution of things we want to do less frequently
 * a macro is used: run_with_period(milliseconds) { .... }
 */

int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {

위의 빨간색 글씨 체 는 우리 가 관심 을 가 지 는 save 작업 을 하고 방법 에 대한 설명 을 본 다음 에 구체 적 인 논 리 를 찾 아 보 자.

위의 코드 논리 에서 다음 과 같은 몇 가 지 를 발견 할 수 있 을 것 이다.
<1>.saveparams 인 자 는 server 대상 아래 에 있 고 server 대상 은 redisServer 형식 입 니 다.다음 그림:

위의 그림 에서*saveprams 의 주석 을 보면*saveprams 가 savepram 형식의 배열 이라는 것 을 알 아야 합 니 다.그럼 지금 은 강 한 호기심 이 있 는 지 savepram 을 보고 싶 습 니 다.
유형 은 어떻게 정 의 됩 니까?다음 그림:

이 를 통 해 알 수 있 듯 이 saveparam 매개 변수 에는 두 개의 매개 변수 가 있 습 니 다.seconds 는 초 수 를 저장 하 는 것 입 니 다.changes 는 양 을 바 꾸 는 것 입 니 다.이 두 개의 매개 변 수 는 우리 설정 파일 의 900 과 같은 설정 에 대응 합 니 다.
<2>그리고 if 를 통 해 만족 하면 rdb SaveBackground 를 사용 하여 rdb 파일 을 지속 적 으로 사용 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기