지금까지 Redis를 사용하면서 정작 주의할 점에 대해선 잘 알지 못했다. 이를 정리해보려 한다.
Redis는 싱글 스레드기 때문에 한 번에 하나씩 명령에 처리할 수 있다. 따라서 데이터 양이 많은 경우 O(n) 명령어를 호출하면, 꽤 오랜 시간 동안 Redis가 다음 요청을 처리할 수 없게 된다. 그러므로 운영 환경에서는 특히나 오래 걸리는 명령어를 사용하지 말아야 한다.
대표적인 O(n) 명령어
keys
: 패턴에 맞는 모든 key들을 조회할 수 있다. 데이터 양이 많아질수록 느려지므로, 운영 환경에서는 scan 명령어를 사용하자.flushall
: 전체 데이터베이스에 있는 모든 키들을 지우는 명령어flushdb
: 선택된 데이터베이스에 있는 모든 키들을 지우는 명령어
참고로 Memcached의 flush_all
명령어는 Redis보다 훨씬 빠르다. 그 이유는 동작 방식에서 차이가 있기 때문이다. Redis는 데이터를 하나하나 지우는 방식으로 동작하기 때문에 시간 복잡도가 O(n)이다. 하지만, Memcached는 모든 데이터를 지우지 않는 대신, 해당 명령어가 실행된 시간만 기록한다. 그리고 get
명령어가 호출된 시점에 유효성을 체크하고 결과를 반환하는 방식이다.
Redis는 모든 데이터를 메모리에 저장하므로 Redis를 사용할 때 메모리 사용량을 주의해야 한다. Redis가 사용하는 메모리 양이 너무 많아지면 서버가 다운될 수 있다. 메모리 사용량을 줄이는 방법 중 하나는 Redis의 maxmemory
옵션을 사용하는 것이다. 이 옵션을 사용하면 Redis가 사용하는 메모리 양을 제한할 수 있다.
Redis에서 maxmemory 옵션을 설정하려면 Redis 구성 파일(redis.conf
)을 수정해야 합니다. 구성 파일에서 maxmemory 옵션을 추가하고 원하는 메모리 크기를 설정한다. 예를 들어, Redis 서버가 1GB의 메모리를 사용하도록 설정하려면 다음과 같이 설정하면 된다.
maxmemory 1gb
설정 파일을 수정한 후 Redis 서버를 다시 시작하면 적용이 된다.