CONFIG SET

<< CONFIG GET CONFIG REWRITE >>

실행중인 레디스 서버 구성 정보 변경

config set 명령은 서버를 재시작하지 않고도 설정을 변경할 수 있다.   설정값 조회는 config get 명령으로 한다.

config set 명령으로 설정시 유의사항은 두 가지 있는데 하나는 단위이고 다른 하나는 save 명령이다.
redis.conf 에서는 kb,mb 같은 단위를 사용할 수 있으나 이 명령에서는 바이트 단위로 숫자만 입력해야 한다. 예를 들어, auto-aof-rewrite-min-size 명령에 64mb 이렇게 사용할 수 없다.
그러나 3.0 이후에는 maxmemory, client-output-buffer-limit, repl-backlog-size에는 단위를 사용할 수 있다. 여기서 주의할 것은 단위를 k, m, g 이렇게만 사용할 수 있고, b를 붙여서 kb, mb, gb 이렇게 사용할 수 있는데, b를 붙이지 않았을 경우는 1000를 곱하는 것이고, 붙이면 1024를 곱하는 것이다.
아래는 redis.conf에 나와있는 단위 표시이다.

1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes


Example

명령>config set maxmemory 4m
결과>OK
명령>config get maxmemory
결과>1) "maxmemory"
2) "4000000"
명령>config set maxmemory 4mb
결과>OK
명령>config get maxmemory
결과>1) "maxmemory"
2) "4194304"

save 파라미터는 redis.conf 설정과는 약간 다르게 여러개 값을 공백으로 구분해서 입력한다.

config set save "900 1 300 10"

RDB

config set 명령으로 RDB 관련 파라미터도 변경할 수 있다. 아래 예와 같이 RDB 파일명을 변경하면 이후 부터는 변경된 파일명으로 작성된다.

Example

명령>config get dbfilename
결과>1) "dbfilename"
2) "dump.rdb"
명령>config set dbfilename a.rdb
결과>OK
명령>config get dbfilename
결과>1) "dbfilename"
2) "a.rdb"

AOF

Append-only 관련 파라미터도 변경할 수 있습니다.
서버 시작시 append-only no로 했다가 운영중에 yes로 변경하면 어떻게 될까요?   Yes로 변경하면 메모리에 있는 데이터를 모두 AOF 파일에 씁니다.   Bgrewriteaof 명령를 실행한 것과 같습니다.
Yes를 no로 변경한 후 데이터를 입력하고 다시 yes로 변경하면 어떻게 될까요?   추가된 데이터만 AOF 파일에 쓰여질까요? 아닙니다.   이때도 메모리에 있는 데이터를 모두 Rewrite 합니다.   그러므로 AOF을 editor로 열어보면 입력한 순서대로 저장되어 있지 않습니다.
하나만 더, no로 변경하고 데이터를 전혀 입력하지 않은 상태에서 yes로 변경하면 rewrite를 할까요?   예, rewrite를 합니다. 즉, 어떤 경우에서든 no에서 yes로 변경되면 rewrite를 합니다.
Append-only file name은 변경할 수 없습니다.


databases

변경할 수 없다. 변경을 시도하면 아래와 같은 메시지가 나온다.

(error) ERR Unsupported CONFIG parameter: databases

dir 작업 디렉토리

작업 디렉토리가 영향을 미치는 것은 AOF 파일, RDB 파일, log 파일입니다.

  • AOF 파일부터 알아보자. 작업 디렉토리를 변경하고 set 명령으로 데이터를 입력한 후 변경 디렉토리를 확인하면 AOF 파일이 만들어지지 않는다. 여전히 기존 디렉토리에 있는 AOF 파일에 추가된다.
    새 작업 디렉토리로 변경할 수 있는 방법이 있을까?   있습니다.   BGREWRITEAOF 명령을 사용하면 새 디렉토리에 AOF 파일이 생기고 REWRITE 했으므로 모든 데이터가 저장되어있습니다. 이후 부터 입력하는 명령들은 기존 AOF 파일에 저장되지 않고 새 디렉토리의 AOF 파일에 추가됩니다.
  • RDB 파일은 새 디렉토리에 생성된다. RDB는 모든 데이터를 파일에 새로 저장하는 것이므로 새 디렉토리에 만들어진다.
  • log 파일은 어떻게 될까? 디렉토리를 변경한 후에 발생한 로그는 새 디렉토리에 log 파일을 만들고 기록합니다. 기존 log 파일은 그대로 남아 있습니다.

작업 디렉토리는 이미 만들어져 있어야 하고, Write permission에 주의하세요.   존재하지 않는 디렉토리를 지정하면 다음과 같은 에러가 발생합니다.

(error) ERR Changing directory: No such file or directory

cluster-require-full-coverage

우선 이 파라미터의 기능을 설명하면, 3대로 구성된 클러스터에서 1대가 다운되면 클러스터 전체가 다운되서 데이터를 입력할 수 없다. Yes 일 경우가 이렇고, No 일때는 1대가 다운되어도 클러스터 전체가 다운되지않고 해당 노드에만 다운된다.
이것을 config set 명령으로 운영중에 변경할 수 있다.   예를 들어, 운용 정책상 처음에는 클러스터에서 1대라도 다운되면 데이터 일부만 입력되는 것은 의미가 없어서 전체가 다운되도록 설정했는데, 실제 상황이 발생했을때, 데이터를 일부라도 받는 것으로 운영 정책을 변경했을때 config set 명령으로 변경 가능하다. 변경되는데 약간의 시간(몇 십초)이 걸린다.   이런 기능이 있다는 것을 알면 운용중 유용하게 사용할 수 있다.
이 파리미터에 대한 자세한 내용은 여기를 보세요.


Config 파라미터 리스트

아래 표는 config get 명령으로 조회할 수 있는 파리미터 리스트와 config set 명령으로 변경할 수 있는지, 없는지를 표시해 놓았다. 일반 파라미터 7개와 rdbchecksum, slaveof은 변경할 수 없다.
Slaveof는 config set 명령으로는 적용할 수 없지만, slaveof 명령이 있기 때문에 명령을 직접 실행하면 됩니다. Config get slaveof 로 ip port를 조회해 볼 수 있고, config rewrite 하면 redis.conf 파일에도 기록됩니다.

config 파라미터 리스트

Redis version 3.0.2
분류Parameter nameValueConfig set
Supported
일반
Genernal
databases16X
logfileredis.logX
pidfile/var/run/redis.pidX
daemonizeyesX
bindX
port5051X
tcp-backlog511X
AOFaof-load-truncatedyesO
aof-rewrite-incremental-fsyncyesO
appendfsynceverysecO
appendonlyyesO
auto-aof-rewrite-min-size67108864O
auto-aof-rewrite-percentage100O
no-appendfsync-on-rewritenoO
RDBdbfilenamedump.rdbO
rdbchecksumyesX
rdbcompressionyesO
saveO
stop-writes-on-bgsave-erroryesO
복제
Replication
slaveofX
slave-read-onlyyesO
slave-priority100O
slave-serve-stale-datayesO
repl-backlog-size1048576O
repl-backlog-ttl3600O
repl-disable-tcp-nodelaynoO
repl-diskless-syncnoO
repl-diskless-sync-delay5O
repl-ping-slave-period10O
repl-timeout60O
min-slaves-max-lag10O
min-slaves-to-write0O
메모리
Memory
maxmemory0O
maxmemory-policynoevictionO
maxmemory-samples5O
클러스터
Cluster
cluster-migration-barrier1O
cluster-node-timeout15000O
cluster-require-full-coverageyesO
cluster-slave-validity-factor10O
기타
Etc
dir/home/redis/redis-3.0.2/5051O
loglevelnoticeO
tcp-keepalive0O
timeout0O
client-output-buffer-limitnormal 0 0 0
slave 268435456 67108864 60
pubsub 33554432 8388608 60
O
maxclients10000O
list-max-ziplist-entries512O
list-max-ziplist-value64O
hash-max-ziplist-entries512O
hash-max-ziplist-value64O
set-max-intset-entries512O
zset-max-ziplist-entries128O
zset-max-ziplist-value64O
activerehashingyesO
hll-sparse-max-bytes3000O
hz10O
latency-monitor-threshold0O
requirepassO
masterauthO
notify-keyspace-eventsO
slowlog-log-slower-than10000O
slowlog-max-len128O
unixsocketO
unixsocketperm0O
lua-time-limit5000O
모니터watchdog-period0O

명령문

CONFIG SET parameter value

  • 이 명령은 version 2.0.0 부터 사용할 수 있다.
Clients for C Hiredis


<< CONFIG GET CONFIG SET CONFIG REWRITE >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.