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 파일 을 지속 적 으로 사용 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redis 해시에 대한 완벽한 가이드변경 가능하므로 필요에 따라 쉽게 변경하고 업데이트할 수 있습니다. Redis 해시는 구조가 평평하므로 JSON에서와 같이 여러 수준을 가질 수 없습니다. redis 해시의 명명 규칙은 hash:key 로 입력되므로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.