기술나눔

Redis 구성 및 최적화

2024-07-12

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

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

(1) 관계형 데이터베이스

관계형 데이터베이스는 관계형 모델 데이터베이스를 기반으로 생성되고 레코드 중심으로 생성된 구조화된 데이터베이스입니다.

일반적인 관계형 데이터베이스: Oracle, MySQL, SQL Server, Microsoft Access, DB2.

(2) 비관계형 데이터베이스

NOSQL=Not Only SQL은 비관계형 데이터베이스의 일반적인 용어입니다. 저장 방법, 저장 구조 및 사용 시나리오에 따라 비관계형 데이터베이스라고 합니다. 주류 관계형 데이터베이스 이외의 데이터베이스를 비관계형 데이터베이스라고 부를 수 있습니다.

일반적인 비관계형 데이터베이스: Redis, MongoDB, Hbase, CouhDB.

2. Redis 기본 사항

(1) Redis 소개

Redis는 C 언어로 작성된 오픈 소스 Nosql 데이터베이스로, 메모리 기반으로 실행되며 키-값(키-값 쌍) 저장 형식을 채택합니다. 포트 번호는 6379입니다.

(2) Redis의 장점

  1. 데이터 읽기 및 쓰기 속도가 빠릅니다.
  2. 풍부한 데이터 유형을 지원합니다. 키-값, 문자열, 목록, 해시, 세트, ​​순서가 지정된 세트.
  3. 데이터 지속성을 지원합니다. 데이터는 디스크에 저장되며, 재시작 후 로드하여 사용할 수 있습니다.
  4. 원자.
  5. 데이터 백업을 지원합니다.

3. 레디스 설치

1. 레디스 설치

[root@localhost ~]# systemctl 방화벽 중지

[root@localhost ~]# setenforce 0

[root@localhost ~]# yum -y gcc* zlib-devel을 설치하세요

[루트@로컬호스트 ~]#tar xvzf redis-4.0.9.tar.gz

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

[root@localhost redis-4.0.9]# make

알아채다:

make 후에 오류 메시지가 생성됩니다.

해결책:
해결 방법 1: make MALLOC=libc를 사용하여 libc용으로 컴파일할 메모리 할당자를 지정합니다.
해결 방법 2: make clean && make distclean

[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 유틸리티/
그중에는 install_server.sh가 초기화 스크립트입니다.

[root@localhost 유틸리티]# ./install_server.sh
redis 실행 파일 경로를 선택해주세요 [] /usr/local/redis/bin/redis-server(실행 경로 제공)

프로세스 및 서비스 제어 보기
[root@localhost 유틸리티]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* 듣기 5360/redis-server 1
[root@localhost 유틸리티]# /etc/init.d/redis_6379 중지(redis가 닫혔습니다)
[root@localhost 유틸리티]# /etc/init.d/redis_6379 시작(에)
[root@localhost 유틸리티]# /etc/init.d/redis_6379 상태 (상태)

구성 매개변수 수정
[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 재시작

2.redis 명령 도구

[root@localhost 유틸리티]# redis-cli(로컬 로그인)
[root@localhost 유틸리티]# redis-cli -h 192.168.10.101 -p 6379(원격 로그인)
192.168.10.101:6379>(탐지 서비스는 정상적으로 실행되고 있습니다)

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-벤치마크 -h 192.168.10.101 -p 6379 -c 100 -n 100000

    주목:

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

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

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

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

(2) 접속 성능 테스트

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

주목:

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

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

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

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

  1. 4. Redis 데이터베이스의 공통 명령

세트는 데이터 명령 형식을 저장합니다. 키 값을 설정합니다.

get 데이터 가져오기 명령 형식 가져오기 키

(1) 주요 관련 명령어

1. 키-값 쌍 추가

127.0.0.1:6379&gt; 1 1 설정
좋아요
127.0.0.1:6379&gt; 2 2 설정
좋아요
127.0.0.1:6379&gt; 3 3 설정
좋아요

2. 데이터베이스의 모든 값을 봅니다.

127.0.0.1:6379&gt; 키 *
1) "3"
2) "1"
3) "2"

3. 데이터베이스에서 v로 시작하는 데이터 보기
127.0.0.1:6379>키 v*

4. 데이터베이스에서 v로 시작하는 모든 데이터를 봅니다.

127.0.0.1:6379>키 대?

5.현재 데이터베이스 보기 V 시작다음은 두 자리의 데이터를 포함합니다.

127.0.0.1:6379>키 v??

(2) 존재한다

값이 존재하는지 확인합니다.

127.0.0.1:6379>존재 f5f5가 존재하는지 확인

(정수) 1 결과는 1이며, 이는 f5 키가 있음을 나타냅니다.

좋다

(정수) 0 결과는 0입니다. 이는 f5 키가 존재하지 않음을 나타냅니다.

(3)델

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

127.0.0.1:6379> 델 v5 데이터베이스에서 v5 삭제

(정수) 1

127.0.0.1:6379>v5를 받으세요

(무)

(4) 종류

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

127.0.0.1:6379>k1형

주목:

Redis가 지원하는 데이터 유형

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

(5) 이름 바꾸기

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

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

127.0.0.1:6379>v22 v2로 이름 변경 v22를 v2로 이름 바꾸기

좋아요

(6) 이름 변경x

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

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

(7) DB크기

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

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) 여러 데이터베이스 간 데이터 이동

127.0.0.1:6379>세트 k1 100 데이터베이스 0에 k1 생성

좋아요

127.0.0.1:6379>k1을 얻으세요

"100"

127.0.0.1:6379>이동 k1 1  //0번 데이터베이스의 k1을 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을 얻으세요         //k1의 값은 데이터베이스 0에서 볼 수 없습니다.

(무)

(3) 데이터베이스의 데이터 지우기

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

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

6. Redis 지속성

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

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

RDB와 AOF의 차이점

ROB는 지정된 시간 간격 내에 데이터 스냅샷을 디스크에 기록합니다. 이는 먼저 데이터를 임시 폴더에 기록하고, 이전 파일을 바이너리 압축으로 저장합니다.

AOF는 서버의 모든 쓰기 및 삭제 작업을 로그 형식으로 기록합니다. 쿼리 작업은 기록되지 않지만 텍스트 형식으로 기록됩니다.

 

RDB 및 AOF의 장점과 단점

RDB 장점:

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

데이터 복구가 빠릅니다.

성능 극대화

높은 시동 효율성

뉴스레터 구독하기결점:

종료 전에 저장되지 않은 데이터는 손실됩니다.

       RDB는 포크 하위 프로세스를 통해 완료되며 리소스를 소비합니다.

AOF 장점:

데이터 내구성이 높다

추가 모드에서는 다운타임이 발생하더라도 로그 파일의 내용이 삭제되지 않습니다.

데이터 보안을 보호하기 위해 다시 쓰기 메커니즘을 시작할 수 있습니다.

AOF 단점:

AOF 데이터 복구 속도가 느립니다.

AOF 운영 효율이 낮다

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

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

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

주목:

다시 시작한 후 Redies가 지속성 파일을 로드해야 하는 경우,우선 사항AOF 파일이 선택됩니다.

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

7. Redis 지속성 구성

(1) RDB 지속성 구성

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

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

  • save 900 1: 900초(15분) 후 키가 하나 이상 변경되면 메모리 스냅샷을 덤프합니다.
  • 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 지속성 구성

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

  • appendonly 예AOF 지속성 켜기(기본값은 no) ##673 줄
  • appendfilename "appendonly.aof" AOF 파일 이름 ##677 줄
  • # appendfsync 항상
  • appendfsync 매초마다
  • # appendfsync 아니요

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

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

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

  • aof-load-truncated 예 ##769행

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

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

8. 성능 문제

(1) 메모리 정보 보기

192.168.9.236:7001> 정보 메모리

사용된 메모리:1210776 사용된 메모리 크기(바이트)
사용된_메모리_인간:1.15M단위는 M으로 표시됩니다.
사용된 메모리 RSS:7802880운영 체제의 관점에서 Redis는 얼마나 많은 메모리를 차지합니까?
사용된_메모리_rss_인간:7.44M단위로 표시
최대 메모리:1073741824최대 메모리 크기
최대 메모리_인간:1.00G 단위로 표시

(2) 재활용 전략

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

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

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

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

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

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

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

키 만료 시간 설정

127.0.0.1:6379>만료 v1 10 v1의 만료 시간은 10초입니다.

주목:

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