아마도 많은 개발자들은 Redis가 매우 간단하고 일부 API를 마스터하는 것만으로도 충분하다고 생각할 것입니다. 실제로 잘못 사용하면 많은 문제가 발생하게 됩니다. 오늘은 Redis 버퍼링에 대해 이야기해보겠습니다. Redis는 클라이언트에 입력 버퍼와 출력 버퍼를 제공하고, 모니터링 버퍼를 볼 수 있는 해당 API를 제공합니다.
입력 버퍼
Redis는 각 클라이언트에 대한 입력 버퍼를 제공합니다. 그 기능은 클라이언트가 보낸 명령을 저장하는 것입니다. 그러면 Redis는 입력 버퍼에서 명령을 추출하여 실행합니다.
Redis가 클라이언트에 제공하는 입력 버퍼 크기는 제한되어 있으며 메모리 1G를 초과할 경우 Redis는 클라이언트를 닫습니다.
버퍼 오버플로 위험
각 클라이언트의 최대 입력 버퍼는 1G를 초과할 수 없으며, 이를 초과하면 클라이언트가 종료되어 애플리케이션 문제가 발생합니다.
입력 버퍼의 크기는 maxmory에서 제어할 수 없습니다. maxmory를 8G로 설정한 경우 Redis가 4G 데이터를 저장하고 모든 클라이언트의 입력 버퍼의 전체 크기가 5G인 경우 데이터 손실 및 키 값이 발생할 수 있습니다. 제거. OOM 및 기타 상황.
버퍼 오버플로가 발생하는 이유는 Redis의 처리 속도가 버퍼의 입력 속도를 따라잡지 못하기 때문입니다. 일반적인 상황은 입력 버퍼에 많은 수의 빅키가 포함되어 있거나 redis가 차단되는 것입니다.
모니터링
입력 버퍼를 모니터링하는 방법은 두 가지가 있습니다
첫 번째 방법은 클라이언트 목록 명령을 통해 현재 연결된 모든 클라이언트 정보를 보는 것
두 번째 방법은 info를 통한 클라이언트 명령은 전체 정보를 표시합니다.
127.0.0.1:6379> client list id=113430 addr=127.0.0.1:57244 fd=7 name= age=3115 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client id=113432 addr=127.0.0.1:57250 fd=9 name= age=3099 idle=342 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=set ……
그 중 입력 버퍼와 관련된 것은 qbuf와 qbuf-free가 있는데, 이는 각각 입력 버퍼의 크기와 나머지 입력 버퍼의 크기를 나타냅니다.
127.0.0.1:6379> info clients # Clients connected_clients:4 client_recent_max_input_buffer:2 client_recent_max_output_buffer:0 blocked_clients:0
client_recent_max_input_buffer는 최대 입력 버퍼의 크기를 나타냅니다.
이 두 가지 방법에는 각각 장단점이 있습니다.
클라이언트 목록은 각 클라이언트의 상황을 정확하게 모니터링할 수 있지만 실행 속도가 느리고 Redis 차단이 발생할 수 있습니다.
info 클라이언트는 빠르게 실행되지만 분석된 데이터는 상대적으로 단순하고 각 클라이언트에 정확할 수 없으며 전체 클라이언트 입력 버퍼 크기를 표시할 수 없고 가장 큰 것만 표시할 수 있습니다.
출력 버퍼
Redis도 입력 버퍼와 마찬가지로 출력 버퍼를 제공합니다. 출력 버퍼는 maxmory에 의해 제어되지 않습니다.
그러나 입력 버퍼와 달리 출력 버퍼는 구성 파일을 통해 제한될 수 있습니다.
client-output-buffer-limit 유형 hardlimit 소프트 리미트 초
type은 클라이언트 유형을 나타냅니다.
hardlimit 출력 버퍼의 최대값을 초과하면 즉시 닫힙니다
sortlimit 및 seccords sortlimit가 초과되면 레코드 초를 제한한 후 클라이언트가 닫힙니다.
Redis의 기본 구성은 다음과 같습니다.
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
Monitoring
출력 버퍼 모니터링 방법과 동일하게 클라이언트 목록 및 정보 클라이언트도 사용됩니다.
클라이언트 목록에서 출력 버퍼링과 관련된 것은 obl, oll, omem인데 주로 출력 버퍼의 크기를 나타냅니다.
info 클라이언트의client_recent_max_output_buffer는 최대 출력 버퍼 크기를 나타냅니다.
장점과 단점은 앞에서 언급한 것과 동일하므로 여기서는 자세히 설명하지 않겠습니다.
또한 클라이언트 연결을 닫는 또 다른 명령은 다음과 같습니다.
client kill ip:port
클라이언트에서 이상이 발견되면 이 명령을 사용하여 비정상적인 연결을 종료할 수 있습니다.
위 내용은 Redis 운영 및 유지 관리 버퍼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!