Redis configuration

이번시간에는 Redis서버의 설정파일을 조작하는 방법에 대해서 알아보도록할게요. Redis서버를 시작할때 굳이 config파일을 사용할 필요는 없어요 자체적으로 default config파일이 있어서 그걸 그냥 쓰거든요. 근데 config파일을 바꿀수는 있긴 한데 그닥 추천하지는 않아요 그냥 테스트나 개발목적으로 해보시는거만 추천드려요.

Redis에 config를 변경하는 가장 정석은 바로 redis.conf라는 설정파일에 설정값을 저장해서 그 파일을 Redis에 넘겨주는건데요. 파일안에 값을 설정하는 형식은 다음과 같아요:

keyword argument1 argument2 ... argumentN

예를 들면 뭐 이런식:

slaveof 127.0.0.1 6380

argument의 구분은 space로 하는데요 문자열에 space를 넣어야하는 경우에는 이렇게 따옴표를 넣어서 이게 하나의 argument이다 라고 명시해줄수 있어요:

requirepass "hello world"

각 config파일의 설정값들은 버젼마다 조금씩 다른데요 자세한건 아래 버젼별 redis.config를 참고해주세요:

Passing arguments via the command line

Redis의 설정값을 변경하는 또다른 방법은 바로 redis-server를 실행할때 command line에 설정값을 넘겨주는 식으로 변경할수 있어요.

./redis-server --port 6380 --slaveof 127.0.0.1 6379

이렇게 넘겨받은 config들은 메모리에 임시로 config파일을 만들어서 저장이 되는데요. 그 파일의 형식은 redis.conf랑 동일해요. 그 말인 즉슨, command line에 설정값을 argument으로 전달하면 그 설정값들을 redis.conf형식으로 convert하고 그걸 메모리에 올려놓고 계속 갖다 쓴다는거죠.

Changing Redis configuration while the server is running

제가 찾고 있던 아주 유용한 팁! redis.conf나 command line으로 설정값을 넘겨주는 방식은 redis를 다시 시작해야한다는 의미자나요. Redis가 실제로 운영되고 있는 상태에서 그건 거의 장사 안하겠다는 의미죠 ㅎㅎ 불필요하게 restart해야한다면 뭐..공지띄우고 어쩌고 저쩌고 해야겠지만…서버가 돌아가는 상태에서 config를 바꿀수 있다면 정말 끝내주지 않아요?

서버를 멈추거나 재시작하지 않고 설정을 바꾸는 마법의 command는 바로 CONFIG SETCONFIG GET이에요. 모든 설정을 CONFIG SET을 통해서 변경할수 있지는 않는데 대부분의 것들은 설정변경이 가능하답니다. 자세한건 링크 누르셔서 읽어보세요.

기존에 redis.conf파일을 이용해서 서버를 실행했는데, CONFIG SET명령어를 이용해서 설정을 변경했다고 해도 redis.conf파일안의 내용이 바뀌는건 아니에요. 메모리에 떠있는 파일만 변경되는것이기 때문에 서버를 다시 실행시키면 임시로 변경된 내용은 저장되지 않았기때문에 기존에 redis.conf만 가지고 실행했을 당시로 돌아갑니다.

그러니까 운영중에 설정을 perfanantly 바꿔야하는 경우에는 redis.conf파일의 설정값도 함께 바꿔주는거 잊지마세요. 참고로 Redis 2.8부터는 CONFIG REWRITE이라는 명령어를 제공하는데 얘를 이용해서 설정을 바꾸는 경우에는 얘가 redis.conf파일을 재빨리 스캔해서 기존에 없는 값들만 바꿀수 있고, 설정값이 없어서 추가를 할수 있는 항목이라도 그 값이 default와 동일하면 파일에 추가되지 않습니다.

Configuring Redis as a cache

Redis는 key를 통해 value를 빠르게 제공하는 NoSQL database입니다. 이걸로많은 부분에 활용을 할수 있지만 Redis에서는 특별히 각 key값에 expire time을 부여함으로써 cache로도 활용할수 있도록 제공하고 있습니다.

maxmemory 2mb
maxmemory-policy allkeys-lru

위의 설정을 보시면 key에 EXPIRE command를 사용할 필요없이 Redis에 할당된 2메가의 메모리가 모두 소진된 경우 LRU 알고리즘에 입각한 순서대로 key가 사라지게 되는거에요. 이 경우에는 Redis가 memcached랑 비슷한 방식으로 캐시를 하게 되는거죠. LRU방식으로 캐시를 하는 방법에 대해서 더 자세히 알아보고 싶으시면 여기를 눌러서 확인해주세요.

Source: https://redis.io/topics/config