기술나눔

NoSQL Redis 구성 및 최적화

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Redis 데이터베이스 기본 소개 및 비교

Redis(RemoteDictionaryServer, 원격 사전형)는 C 언어로 작성된 오픈소스 NoSQL 데이터베이스입니다. Redis는 메모리 기반으로 실행되며 지속성을 지원합니다. 이는 키-값(키-값 쌍) 저장 형식을 채택하며 현재 분산 아키텍처에서 없어서는 안될 부분입니다.

1. 비관계형 데이터베이스

NoSQL(NoSQL=Not Only SQL)은 "단지 SQL이 아니다"라는 의미를 가지며, 비관계형 데이터베이스의 일반적인 용어입니다. 주류 NoSQL 데이터베이스에는 Redis, MongBD, Hbase, CouhDB 등이 포함됩니다. 위의 비관계형 데이터베이스는 저장 방법, 저장 구조 및 사용 시나리오가 완전히 다릅니다. 그래서 우리는 관계형 데이터베이스와 같은 일반적인 용어가 아닌 비관계형 데이터베이스의 집합이라고 생각합니다. 즉, 주류 관계형 데이터베이스 이외의 데이터베이스는 비관계형 데이터베이스로 간주될 수 있습니다. NOSQL 데이터베이스는 비관계형, 분산형, 오픈소스, 수평적 확장 등의 장점으로 인해 차세대 데이터베이스 제품으로 꼽힌다.

2. 관계형 데이터베이스

관계형 데이터베이스는 관계형 모델을 기반으로 하는 구조화된 데이터베이스이며 일반적으로 레코드 지향적입니다. 집합 대수와 같은 수학적 개념과 방법을 사용하여 데이터베이스의 데이터를 처리합니다. 관계형 모델은 2차원 테이블 모델을 의미하므로 관계형 데이터베이스는 2차원 테이블과 이들 사이의 관계로 구성된 데이터 조직입니다. 현실 세계에서는 다양한 엔터티와 엔터티 간의 다양한 관계가 관계형 모델로 표현될 수 있습니다. SQL문(Standard Data Query Language)은 관계형 데이터베이스를 기반으로 하는 언어로, 관계형 데이터베이스에서 데이터를 검색하고 연산하는데 사용된다.

3. 비관계형 데이터베이스의 배경

Web2.0 웹사이트의 등장으로 Web2.0 웹사이트를 다룰 때 관계형 데이터베이스가 노출되며, 특히 대용량 데이터와 높은 동시성 SNS(Social Networking Services, 즉 소셜 네트워크 서비스)를 갖춘 Web2.0 순수 동적 웹사이트에는 많은 문제가 있습니다. 3높이 문제와 같이 해결하기 어려운 문제입니다.

(1) 고성능--데이터베이스에 대한 높은 동시 읽기 및 쓰기 요구 사항

Web2.0 웹사이트는 사용자의 개인화 정보를 바탕으로 동적 페이지를 생성하고 실시간으로 동적 정보를 제공하므로 동적 페이지 정적 기술을 사용할 수 없습니다. 따라서 데이터베이스의 동시 로드는 매우 높으며 일반적으로 초당 읽기 및 쓰기 요청이 10,000개를 넘습니다. 관계형 데이터베이스는 여전히 수만 개의 쿼리 요청을 간신히 지원할 수 있지만, 수만 개의 데이터 쓰기 요청이 있는 경우 하드 디스크 I0은 더 이상 이를 감당할 수 없습니다. 일반 BBS 웹사이트의 경우 동시 데이터 쓰기 요청이 많은 경우가 많습니다.

(2) 대용량 스토리지--대량 데이터의 효율적인 저장 및 액세스에 대한 요구 사항

Facebook, Friendfeed와 같은 SNS 웹사이트는 매일 엄청난 양의 사용자 동적 정보를 생성합니다. 예를 들어 Friendfeed는 한 달에 2억 5천만 개 이상의 사용자 동적 정보를 생성합니다. 관계형 데이터베이스의 경우 2억 5천만 개의 레코드가 포함된 테이블에서 SQL 쿼리를 실행할 때 쿼리 효율성이 매우 낮습니다.

(3)고확장성 및 고가용성 - 데이터베이스의 고확장성 및 고가용성에 대한 요구사항

웹 아키텍처에서 데이터베이스는 수평 확장이 가장 어렵습니다. 응용 시스템에 대한 사용자 수와 방문 횟수가 나날이 증가하면 데이터베이스는 웹 서비스와 같은 하드웨어 및 서버 노드를 추가하는 것만으로는 단순히 성능과 로드 용량을 확장할 수 없습니다. 특히 24시간 서비스를 제공해야 하는 일부 웹사이트의 경우 데이터베이스 업그레이드 및 확장에는 다운타임 유지 관리 및 데이터 마이그레이션이 수반되는 경우가 많아 작업량이 매우 방대합니다.

관계형 데이터베이스와 비관계형 데이터베이스는 고유한 특성과 응용 시나리오를 가지고 있으며, 이 둘의 긴밀한 결합은 Web2.0 데이터베이스 개발에 새로운 아이디어를 가져올 것입니다. 관계형 데이터베이스는 관계에 중점을 두고, 비관계형 데이터베이스는 저장소에 중점을 둡니다. 예를 들어 읽기와 쓰기가 분리된 MySQL 데이터베이스 환경에서는 자주 접근하는 데이터를 비관계형 데이터베이스에 저장해 접근 속도를 높일 수 있다.

4.Redis의 장점

데이터 읽기 및 쓰기 속도는 매우 빠릅니다. 데이터 읽기 속도는 최대 110,000회/s, 데이터 쓰기 속도는 최대 81,000회/s에 도달할 수 있습니다.

풍부한 데이터 유형을 지원합니다. 단순한 키-값 유형 데이터를 지원할 뿐만 아니라 문자열, 목록, 해시, 세트 및 순서가 지정된 세트와 같은 데이터 유형 작업도 지원합니다.

데이터 지속성을 지원합니다. 메모리의 데이터를 디스크에 저장하고 다시 시작할 때 다시 로드할 수 있습니다.

원자성, 모든 Redis 작업은 원자성입니다.

데이터 백업, 즉 마스터-저장 모드의 데이터 백업을 지원합니다.

Redis는 메모리 기반 데이터베이스이며 캐싱은 가장 일반적인 애플리케이션 시나리오 중 하나입니다. 또한 Redis의 일반적인 애플리케이션 시나리오에는 최신 N 데이터를 얻기 위한 작업, 순위 애플리케이션, 카운터 애플리케이션, 스토리지 관계, 실시간 분석 시스템 및 로깅도 포함됩니다.

2. Redis 설치 및 최적화

1: 설치

[root@localhost ~]# systemctl stop Firewalld //실험 환경에서는 방화벽을 꺼도 아무런 효과가 없습니다. 프로덕션 환경에서는 방화벽 정책을 추가해 보는 것이 좋습니다.

[root@localhost ~]# setenforce 0 //커널을 끄면 애플리케이션 실행이 차단됩니다.

[root@localhost ~]# yum -y install gcc* zlib-devel //tar 패키지 압축 해제에 필요한 도구 다운로드

[루트@로컬호스트 ~]#tar xvzf redis-4.0.9.tar.gz //redis는 오픈 소스이며 공식 웹사이트에서 이 패키지를 다운로드할 수 있습니다.

[루트@로컬호스트 ~]#cd 레디스-4.0.9/

[root@localhost redis-4.0.9]# make

알아채다:

제작시 다음과 같은 오류 메시지가 나타날 수 있습니다.

해결 방법 1: 사용MALLOC=l로 만들어라ibc는 libc에 대한 메모리 할당자를 지정합니다.엮다

해결 방법 2: 깨끗한 && ma 만들기케 디스트클린

[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install

[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/

[root@localhost redis-4.0.9]# cd /root/redis-4.0.9/utils/

[root@localhost 유틸리티]# ./install_server.sh

주목:

구성 파일: /etc/redis/6379.conf //구성 파일 경로

로그 파일: /var/log/redis_6379.log //로그 파일 경로

데이터 디렉토리: /var/lib/redis/6379 //데이터 파일 경로

실행 파일: /usr/local/redis/bin/redis-server //실행 파일 경로

Cli 실행 파일: /usr/local/redis/bin/redis-cli //클라이언트 명령줄 도구

2: 프로세스 보기

[root@localhost 유틸리티]# netstat -anpt | grep redis

3: 서비스 제어

[root@localhost ~]#/etc/init.d/redis_6379 중지

[root@localhost ~]#/etc/init.d/redis_6379 시작

[root@localhost ~]#/etc/init.d/redis_6379 재시작

[root@localhost ~]#/etc/init.d/redis_6379 상태

4: 구성 매개변수 수정

[root@localhost ~]#vim /etc/redis/6379.conf

바인드 127.0.0.1 192.168.10.101    //리스닝 호스트 주소

포트 6379 //포트

데몬화 예 //데몬 프로세스 활성화

pid 파일 /var/run/redis_6379.pid //PID 파일 지정

loglevel 공지 //로그 수준

로그파일 /var/log/redis_6379.log //로그 파일 지정

[root@localhost~]#/etc/init.d/redis_6379 재시작

[root@localhost 유틸리티]# netstat -anpt | grep redis

3. Redis 명령 도구

Ø redis-server: Redis를 시작하기 위한 도구;

Ø redis-benchmark: 이 머신에서 Redis의 작동 효율성을 감지하는 데 사용됩니다.

Ø redis-check-aof: AOF 지속성 파일을 복구합니다.

Ø redis-check-rdb: RDB 지속성 파일을 복구합니다.

Ø redis-cli: Redis 명령줄 도구.

1: redis-cli 명령줄 도구

(1) 로컬 Redis에 연결

[root@localhost ~]# redis-cli

127.0.0.1:6379>

(2) Redis 서비스가 시작되었는지 테스트합니다.

127.0.0.1:6379> 핑

(3) 원격 접속

[루트@로컬호스트 ~]#redis-cli -h 192.168.10.101 -p 6379

2: 도움 받기

Ø 도움말@<group> :얻다<group> ;의 명령 목록

Ø 도움말<command> : 명령에 대한 도움말을 얻습니다.

Ø 도움말<tab> : 도움이 될 수 있는 주제 목록을 가져옵니다.

주목:

Ø 도움말<tab> : 도움이 될 수 있는 주제 목록을 가져옵니다.

도움말을 입력한 후 탭 키를 누르세요.

(1)List 데이터 유형과 관련된 모든 명령 보기

127.0.0.1:6379&gt;도움 @목록

(2)set 명령에 대한 명령 도움말 보기

127.0.0.1:6379&gt;도움말 설정

3: redis-벤치마크 테스트 도구

redis-benchmark는 Redis 서비스의 성능을 효과적으로 테스트할 수 있는 공식 Redis 성능 테스트 도구입니다.

Ø -h: 서버 호스트 이름을 지정합니다.

Ø -p: 서버 포트를 지정합니다.

Ø -s: 서버 소켓을 지정합니다.

Ø -c: 동시 연결 수를 지정합니다.

Ø -n: 요청 수를 지정합니다.

Ø -d: SET/GET 값의 데이터 크기를 바이트 단위로 지정합니다.

Ø -k:1=생체 유지 0=재연결;

Ø -r: SET/GET/INCR은 임의의 키를 사용하고 SADD는 임의의 값을 사용합니다.

Ø -P: 파이프를 통한 전송<numreq> 묻다;

Ø -q: Redis를 강제 종료합니다. 쿼리/초 값만 표시됩니다.

Ø --csv: CSV 형식으로 출력합니다.

Ø -l: 루프를 생성하고 테스트를 영구적으로 실행합니다.

Ø -t: 쉼표로 구분된 테스트 명령 목록만 실행합니다.

Ø -I: 유휴 모드. N개의 유휴 연결만 열고 기다립니다.

(1) 테스트 요청 성능

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000 //IP 주소 192.168.10.101 및 포트 6379 성능을 사용하여 Redis 서버에 100개의 동시 연결 및 100000개의 요청 테스트를 보냅니다.

주목:

Ø -h: 서버 호스트 이름을 지정합니다.

Ø -p: 서버 포트를 지정합니다.

Ø -c: 동시 연결 수를 지정합니다.

Ø -n: 요청 수를 지정합니다.

====== MSET (10키) ======

1.02초 만에 100000개 요청 완료

100개의 병렬 클라이언트 ##100 동시 연결

3바이트 페이로드

살아있게 하다: 1

87.25% &lt;= 1밀리초 ##87.25%의 명령 실행 시간이 1밀리초 이하입니다.

99.90% &lt;= 2밀리초

100.00% &lt;= 2밀리초

초당 97943.19 요청 #초당 요청 수

(2) 접속 성능 테스트

[루트@로컬호스트 ~]#redis-벤치마크 -h 192.168.10.101 -p 6379 -q -d 100

주목:

Ø -h: 서버 호스트 이름을 지정합니다.

Ø -p: 서버 포트를 지정합니다.

Ø -d: SET/GET 값의 데이터 크기를 바이트 단위로 지정합니다.

Ø -q: Redis를 강제 종료합니다. 쿼리/초 값만 표시됩니다.

PING_INLINE: 초당 121506.68 요청 //초당 완료된 PING 작업 수

PING_BULK: 초당 124378.11개 요청

SET: 초당 121654.50 요청 //초당 SET 키 값이 완료되는 횟수

GET: 초당 122100.12 요청 //초당 완료된 GET 키 값 수

INCR: 초당 118764.84개 요청 //초당 완료되는 원자 카운트 수

LPUSH: 초당 112612.61개 요청

RPUSH: 초당 118623.96개 요청

LPOP: 초당 107874.87 요청

RPOP: 초당 114416.48 요청

SADD: 초당 123304.56 요청

HSET: 초당 122249.38개 요청

SPOP: 초당 128040.97 요청

LPUSH(LRANGE 벤치마킹에 필요): 초당 116686.12개 요청

LRANGE_100(첫 번째 100개 요소): 초당 40016.00개 요청

LRANGE_300(첫 300개 요소): 초당 11991.85개 요청

LRANGE_500(첫 번째 450개 요소): 초당 7381.71개 요청

LRANGE_600(첫 600개 요소): 초당 5230.67개 요청

MSET(10개 키): 초당 92421.44개 요청 //초당 다중 키 v라우에요청 수

(3)설정 및 lpush 작업 성능

[root@localhost ~]# redis-벤치마크 -t 설정,lpush -n 100000 -q //set 및 lpush 작업 중에 이 머신에서 Redis 서비스 성능을 테스트합니다.

주목:

Ø -n: 요청 수를 지정합니다.

Ø -q: Redis를 강제 종료합니다. 쿼리/초 값만 표시됩니다.

Ø -t: 쉼표로 구분된 테스트 명령 목록만 실행합니다.

SET: 초당 121951.22 요청

LPUSH: 초당 127226.46개 요청

4. 레디스 일반적인 데이터베이스 명령

Ø 세트: 데이터를 저장합니다. 기본 명령 형식은 다음과 같습니다. 키 값 설정

Ø 얻다: 데이터를 가져옵니다. 기본 명령 형식은 다음과 같습니다. 열쇠를 얻다

1열쇠 관련 명령

존재하다 레디스 데이터베이스에서 열쇠 관련 명령은 주로 다음과 같습니다.

1) 키-값 쌍 추가

사용 이 명령은 규칙을 준수하는 키 값 목록을 가져올 수 있습니다. 일반적으로 결합할 수 있습니다.* ,? 사용할 수 있는 옵션.

127.0.0.1:6379>세트 k1 1

좋아요

127.0.0.1:6379>세트 k2 2

좋아요

127.0.0.1:6379>k3 3 세트

좋아요

127.0.0.1:6379>v1 4 세트

좋아요

127.0.0.1:6379>v5 5를 설정하다

좋아요

(2) 현재 데이터베이스의 모든 키 보기

127.0.0.1:6379>열쇠  *  

1) "선생님"

2) "k1"

3) "k2"

4) "k3"

5) "v1"

6) "v5"

127.0.0.1:6379>v22 5 세트

좋아요

(3) 현재 데이터베이스를 봅니다. V 처음에 데이터

127.0.0.1:6379>키 v*    

1) "v1"

2) "v5"

3) "v22"

(4) 현재 데이터베이스를 봅니다. V 시작 이후의 모든 데이터 비트를 포함합니다.

127.0.0.1:6379>키 대?   

1) "v1"

2) "v5"

(5) 현재 데이터베이스를 봅니다. V 시작 V 시작 뒤의 두 자리 데이터를 포함합니다.

127.0.0.1:6379>키 v??   

1) "v22"

2:존재한다

존재한다 이 명령은 키 값이 존재하는지 여부를 확인할 수 있습니다.

127.0.0.1:6379>선생님이 존재합니다

(정수) 1

결과는 1입니다. 즉, 선생님 키가 존재합니다

127.0.0.1:6379>차가 존재한다

(정수) 0

결과는 0, 즉 키가 존재하지 않습니다

3:델

이 명령은 지정된 항목을 삭제할 수 있습니다. 열쇠

127.0.0.1:6379>키 *

1) "선생님"

2) "v1"

3) "v22"

4) "k3"

5) "k1"

6) "k2"

7) "v5"

127.0.0.1:6379> 델 v5

(정수) 1

127.0.0.1:6379>v5를 받으세요

(무)

4:유형

사용 유형 명령을 얻을 수 있습니다 열쇠 값 유형

127.0.0.1:6379>k1형

주목:

Redis가 지원하는 데이터 유형

  • 문자열: 키 값 캐싱에 사용되는 일반적인 설정 및 가져오기 유형인 가장 간단한 유형입니다.
  • 해시: 맵과 유사한 구조입니다. 일반적으로 객체와 같은 구조화된 데이터는 Redis에 캐시될 수 있습니다.
  • 목록: 목록은 목록을 사용하여 팬 목록, 기사 댓글 목록 등과 같은 일부 목록 유형 데이터 구조를 저장할 수 있습니다.
  • 세트: 세트는 중복 항목을 자동으로 제거하는 순서가 지정되지 않은 컬렉션입니다.
  • Sorted Set: Sorted Set은 중복은 제거되지만 정렬이 가능한 Sorted Set입니다. 작성 시 점수가 부여되며, 점수에 따라 자동으로 정렬됩니다.

5:이름을 바꾸다

이름을 바꾸다 이 명령은 기존 열쇠 이름 바꾸기

실제 사용에서는 다음을 사용하는 것이 좋습니다. 존재한다 대상을 보는 명령 열쇠 존재하는지 확인한 후 실행 여부를 결정합니다. 이름을 바꾸다 중요한 데이터를 덮어쓰지 않도록 하는 명령

127.0.0.1:6379>키 v*

1) "v1"

2) "v22"

127.0.0.1:6379>v22 v2로 이름 변경

좋아요

127.0.0.1:6379>키 v*

1) "v1"

2) "v2"

127.0.0.1:6379>v1을 받으세요

"4"

127.0.0.1:6379>v2를 받으세요

"5"

127.0.0.1:6379>v1 v2 이름 바꾸기

좋아요

127.0.0.1:6379>v1을 받으세요

(무)

127.0.0.1:6379>v2를 받으세요

"4"

6:이름 바꾸기

이름 바꾸기 명령의 기능은 기존을 수정하는 것입니다. 열쇠 이름 바꾸기를 수행하고 새 이름이 존재하는지 확인하십시오.

사용이름 바꾸기 명령의 이름이 바뀌면 대상이 열쇠 존재하는 경우 이름이 바뀌지 않습니다.

127.0.0.1:6379>키 *

1) "선생님"

2) "k3"

3) "k1"

4) "k2"

5) "v2"

127.0.0.1:6379>선생님을 얻다

"장롱"

127.0.0.1:6379>v2를 받으세요

"4"

127.0.0.1:6379>renamenx v2 선생님

(정수) 0

127.0.0.1:6379>키 *

1) "선생님"

2) "k3"

3) "k1"

4) "k2"

5) "v2"

127.0.0.1:6379>선생님을 얻다

"장롱"

127.0.0.1:6379>v2를 받으세요

"4

7:디비사이즈

디비사이즈 명령의 목적은 현재 데이터베이스를 보는 것입니다. 열쇠 수.

127.0.0.1:6379> 디비사이즈

(정수) 5

5. 여러 데이터베이스에 대한 공통 명령

1: 여러 데이터베이스 간 전환

레디스 변경사항 없이 기본적으로 포함됨 16 데이터베이스, 데이터베이스 이름은 숫자입니다. 0-15 순서대로 이름을 지을 것

(1)일련번호로 전환 10 데이터 베이스

127.0.0.1:6379>10개 선택

좋아요

(2)일련번호로 전환 15 데이터 베이스

127.0.0.1:6379[10]>15를 선택하세요

좋아요

(3)일련번호로 전환 0 데이터 베이스

127.0.0.1:6379[15]>0을 선택하세요

2: 여러 데이터베이스 간 데이터 이동

레디스 여러 데이터베이스는 어느 정도 상대적으로 독립적입니다. 0 위 매장 케이1 데이터, 기타 1-15 데이터베이스에서는 볼 수 없습니다.

127.0.0.1:6379>세트 k1 100

좋아요

127.0.0.1:6379>k1을 얻으세요

"100"

127.0.0.1:6379>1을 선택하세요

좋아요

127.0.0.1:6379[1]>k1을 얻으세요

(무)

127.0.0.1:6379[1]>0을 선택하세요 //대상 데이터베이스로 전환 0

좋아요

127.0.0.1:6379>k1을 얻으세요 //대상 데이터가 존재하는지 확인

"100"

127.0.0.1:6379>이동 k1 1 //데이터 베이스 0 가운데 케이1 데이터베이스로 이동 1 가운데

(정수) 1

127.0.0.1:6379>1을 선택하세요 //대상 데이터베이스로 전환 1

좋아요

127.0.0.1:6379[1]>k1을 얻으세요 //이동된 데이터 보기

"100"

127.0.0.1:6379[1]> 0을 선택하세요

좋아요

127.0.0.1:6379> k1을 얻으세요 //데이터베이스에 0 에서 볼 수 없습니다. 케이1

(무)

3: 데이터베이스의 데이터 지우기

현재 데이터베이스 데이터를 지우려면 다음을 사용하십시오. 플러시DB

명령 구현, 모든 데이터베이스 데이터 지우기, 사용 플러샬 명령 구현

6. Redis 지속성

레디스 모든 데이터는 메모리에 저장된 후 때때로 디스크에 비동기적으로 저장됩니다.(이것은 ... 불리운다반영구적 모드”); 모든 데이터 변경 사항을 파일만 추가(aof)~에(이것은 ... 불리운다전체 지속성 모드”)

Redis 데이터는 메모리에 저장되므로 지속성이 구성되지 않은 경우레디스 다시 시작하면 모든 데이터가 손실됩니다.따라서 다음을 활성화해야 합니다.레디스 지속성 기능은 데이터를 디스크에 저장합니다. 레디스 재부팅 후 디스크에서 데이터를 복구할 수 있습니다.레디스 지속성을 위해 두 가지 방법이 제공됩니다. 그 중 하나는 뉴스레터 구독하기레디스 데이터베이스 지속성(원칙은 리드인메모리 데이터베이스 로깅 타이밍 덤프 디스크에 뉴스레터 구독하기 끈기), 다른 하나는 오피오피추가만 파일지속성(원칙은 리드 작업 로그는 첨부된 방식으로 파일에 기록됩니다.

1:뉴스레터 구독하기 그리고 오피오피 차이점

(1) RDB란 무엇인가?

기본 방법

RDB 지속성은 현재 프로세스 데이터의 스냅샷을 생성하여 하드 디스크에 저장하는 프로세스입니다. RDB 지속성을 트리거하는 프로세스는 수동 트리거링과 자동 트리거링으로 구분됩니다.

트리거 메커니즘: 수동 트리거는 각각 save 및 bgsave 명령에 해당합니다.

save 명령: RDB 프로세스가 완료될 때까지 현재 Redis 서버를 차단합니다. 메모리 양이 많은 인스턴스의 경우 시간 차단이 발생합니다. 온라인 환경에서는 사용하지 않는 것이 좋습니다.

bgsave 명령: Redis 프로세스는 포크(프로세스 생성에 사용되는 함수) 작업을 실행하여 하위 프로세스를 생성합니다. RDB 지속성 프로세스는 하위 프로세스를 담당하며 완료 후 자동으로 종료됩니다. 차단은 포크 단계에서만 발생합니다.

(2) RDB의 장점과 단점:

RDB의 장점:

RDB는 특정 시점의 Redis 데이터 스냅샷을 나타내는 압축된 압축 바이너리 파일입니다. 백업, 전체 복사 및 기타 시나리오에 매우 적합합니다. 예를 들어, 6시간마다 bgsave 백업을 수행하고 재해 복구를 위해 RDB 파일을 원격 시스템이나 파일 시스템에 복사합니다.

Redis는 RDB를 로드하고 AOF 방식보다 훨씬 빠르게 데이터를 복구합니다.

RDB의 단점:

RDB 모드의 데이터는 실시간 지속성/두 번째 수준 지속성을 달성할 수 없습니다. bgsave를 실행할 때마다 자식 프로세스를 생성하기 위해 포크(fork) 작업을 수행하기 때문에 이는 중량 작업이고 빈번한 실행 비용이 너무 높습니다.

RDB 파일은 특정 바이너리 형식으로 저장됩니다. Redis 버전이 발전하면서 RDB 버전의 형식이 다양해졌습니다. Redis 서비스의 이전 버전이 새 버전의 RDB 형식과 호환되지 않는 문제가 있습니다.

2. AOF란 무엇인가요?

AOF(append only file) 지속성: 각 쓰기 명령을 독립 로그에 기록한 다음 AOF 파일에서 명령을 다시 실행하여 다시 시작할 때 데이터를 복원합니다. AOF의 주요 기능은 데이터 지속성의 실시간 문제를 해결하는 것입니다. 이는 이제 Redis 지속성의 주류입니다.

둘 중 하나를 선택하는 기준은 다음과 같습니다.

더 높은 캐시 일관성을 위해 일부 성능을 희생합니다(오피오피),

쓰기 작업이 빈번할 경우 성능 향상을 위해 백업을 활성화하지 말고 수동 작업을 기다리십시오. 구하다 언제 다시 백업해두세요(뉴스레터 구독하기

주목:

Redies가 다시 시작된 후 영구 파일을 로드해야 하는 경우 AOF 파일이 선택됩니다.

RDB를 먼저 활성화한 다음 AOF를 활성화하고 RDB를 먼저 유지하면 RDB 파일의 내용이 AOF로 덮어쓰여집니다.

3:레디스 지속성 구성

(1)뉴스레터 구독하기 지속성 구성

[root@localhost ~]# vim /etc/redis/6379.conf

6379.conf 열기 파일을 검색한 후 구하다, 아래와 같이 구성 정보를 볼 수 있습니다.

  • Ø save 900 1: 900초(15분) 후 최소 1개의 키가 변경되면 메모리 스냅샷을 덤프합니다.
  • Ø save 300 10: 300초(5분) 후 최소 10개의 키가 변경된 경우 메모리 스냅샷을 덤프합니다.
  • Ø save 60 10000: 60초(1분) 후 최소 10000개의 키가 변경된 경우 메모리 스냅샷을 덤프합니다.
  • dbfilename dump.rdb: RDB 파일 이름 ##254 줄
  • dir /var/lib/redis/6379: RDB 파일 경로 ##264 줄
  • rdbcompression yes: ##242 줄을 압축할지 여부

(2)AOF 지속성 구성

존재하다 레디스 구성 파일에는 세 가지 동기화 방법이 있습니다.

  • 추가만 yes: AOF 지속성을 활성화합니다(기본값은 no) ##673 줄
  • appendfilename "appendonly.aof ": AOF 파일 이름 ##677 줄
  • # appendfsync 항상
  • appendfsync 매초마다
  • # appendfsync 아니요

항상: 동기 지속성, 데이터가 변경될 때마다 즉시 디스크에 기록됩니다.

Everysec: 기본적으로 권장, 1초마다 비동기식으로 녹화(기본값)

no: 동기화하지 않습니다. 동기화 방법을 결정하는 것은 운영 체제에 맡깁니다.

  • aof-load-truncated 예 ##769행

문제가 있을 수 있는 마지막 명령을 무시합니다.

[root@localhost ~]#/etc/init.d/redis_6379 재시작

(2) AOF 재작성

해결하기 위해 오피오피 파일 크기가 계속 증가하는 경우 사용자는 다음 주소로 신고할 수 있습니다. 레디스 보내다 BGREWRITEAOF주문하다.BGREWRITEAOF 명령은 다음을 통해 제거됩니다. 오피오피 재정의할 파일의 중복 명령(고쳐 쓰기오피오피파일, 만들다 오피오피 파일 크기를 가능한 한 작게 유지하십시오.

127.0.0.1:6379&gt; bgrewriteaof

백그라운드 추가 전용 파일 다시 쓰기가 시작되었습니다.

# 로그가 BGREWRITEAOF인 경우,만약에다시 쓰기 시 appendfsync 없음yes로 설정하면 새 쓰기 작업이 fsync와 동기화되지 않고 임시로만 버퍼에 저장된다는 의미입니다. , 디스크 IO 작업 충돌을 방지하려면 쓰기 전에 다시 쓰기가 완료될 때까지 기다리십시오. Redis의 기본값은 no입니다.

no-appendfsync-on-rewrite 없음

# 마지막 로그 재작성 중에 현재 AOF 파일 크기가 AOF 파일 크기의 두 배가 되면 BGREWRITEAOF 작업이 발생합니다.

자동-aof-재작성-백분율 100

주목:

100은 다음을 가리킨다.AOF 파일 증가율은 마지막 재작성과 비교하여 현재 AOF 파일의 증가율을 나타냅니다.100은 2배

#Reids가 처음 시작될 때 작은 파일 크기로 인해 빈번한 BGREWRITEAOF를 피하기 위해 BGREWRITEAOF 명령을 실행하기 위한 현재 AOF 파일의 최소값입니다.

자동-aof-재작성-최소-크기-64mb

7. 성과관리

1: 메모리 정보 보기

192.168.9.236:7001> 정보 메모리

Used_memory:1210776 #사용된 메모리의 크기,바이트 단위
Used_memory_human:1.15M # 단위로 표시,M으로
Used_memory_rss:7802880 # 운영 체제 관점에서 Redis는 얼마나 많은 메모리를 차지합니까?
Used_memory_rss_human:7.44M # 단위로 표시
maxmemory:1073741824 # 최대 메모리 크기
maxmemory_human:1.00G # 단위로 표시

2: 재활용 전략

최대 메모리 정책: 재활용 전략

Ø 휘발성-lru: 허용한다 레디스 전체 데이터 세트에서 가장 최근에 사용된 데이터를 선택하세요. 열쇠 삭제

Ø 휘발성-ttl키 만료 시간에 따라 제거 

Ø 휘발성-무작위: 설정된 만료 시간에 따라 데이터 수집에서 제거할 데이터를 무작위로 선택합니다.

Ø 올키스-lru:사용 알고리즘은 모든 데이터 세트에서 데이터를 제거합니다.

Ø allkeys-무작위: 데이터 수집에서 제거할 데이터를 무작위로 선택합니다.

Ø 퇴거 금지: 데이터 제거 비활성화(기본값)

주목:

키 만료 시간 설정

만료 v1 10

v1의 만료 시간은 10초입니다.

주목:

언제 레디스 메모리 부족으로 인해 하나를 회수해야 함 열쇠 시간,레디스 가장 먼저 고려해야 할 사항은 가장 오래된 데이터가 아닌 최근에 가장 적게 사용된 데이터를 재활용하는 것입니다. 열쇠 또는 만료 예정 열쇠 다음 중 무작위로 하나를 선택하세요. 열쇠, 데이터 세트에서 제거됨

8. Redis 비밀번호 설정

1: 설정 방법

방법 1. redis.conf 구성 파일을 통해 비밀번호 설정

requirepass 키워드와 비밀번호를 찾으세요. 기본적으로 주석 처리되어 있습니다. 즉, 기본적으로 비밀번호가 필요하지 않습니다.

댓글을 열고 비밀번호를 설정한 후 다시 시작하세요.

방법 2. 이름을 지정하여 비밀번호 설정

redis-cli를 사용하여 redis에 연결하고 다음 명령을 실행합니다.

구성 설정 requirepass 123456

실행이 완료된 후에는 클라이언트를 종료하고 다시 로그인할 때 비밀번호를 입력할 필요가 없습니다.

2.연결 방법

1. 접속시 비밀번호를 입력하세요

[루트@로컬호스트 bin]# ./redis-cli -a 123456

2. 먼저 연결한 후 비밀번호를 입력하세요.

[root@localhost bin]# ./redis-cli127.0.0.1:6379&gt; 인증 123456

3: 닫기 방법

[root@localhost bin]# ./redis-cli -a 123456 종료

4: 차이

1) 구성 파일을 수정하여 설정한 비밀번호는 영구적으로 적용됩니다. 명령을 사용하여 설정한 비밀번호는 일시적으로 적용되며 다시 시작한 후에는 유효하지 않습니다.

2) 구성 파일에 설정된 비밀번호를 수정하려면 다시 시작해야 합니다. 명령으로 설정한 비밀번호는 로그아웃한 후 다시 로그인해야 적용되며, 다시 시작하면 해당 비밀번호가 무효화됩니다.

3) 명령의 우선순위가 구성 파일의 우선순위보다 높습니다.