config_set
CONFIG SET
Redis Server Course | Redis Technical Support | Redis Enterprise Server |
---|
실행중인 레디스 서버 구성 정보 변경
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에 나와있는 단위 표시이다.
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 설정과는 약간 다르게 여러개 값을 공백으로 구분해서 입력한다.
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
변경할 수 없다. 변경을 시도하면 아래와 같은 메시지가 나온다.
dir 작업 디렉토리
작업 디렉토리가 영향을 미치는 것은 AOF 파일, RDB 파일, log 파일입니다.
- AOF 파일부터 알아보자. 작업 디렉토리를 변경하고 set 명령으로 데이터를 입력한 후 변경 디렉토리를 확인하면
AOF 파일이 만들어지지 않는다. 여전히 기존 디렉토리에 있는 AOF 파일에 추가된다.
새 작업 디렉토리로 변경할 수 있는 방법이 있을까? 있습니다. BGREWRITEAOF 명령을 사용하면 새 디렉토리에 AOF 파일이 생기고 REWRITE 했으므로 모든 데이터가 저장되어있습니다. 이후 부터 입력하는 명령들은 기존 AOF 파일에 저장되지 않고 새 디렉토리의 AOF 파일에 추가됩니다. - RDB 파일은 새 디렉토리에 생성된다. RDB는 모든 데이터를 파일에 새로 저장하는 것이므로 새 디렉토리에 만들어진다.
- log 파일은 어떻게 될까? 디렉토리를 변경한 후에 발생한 로그는 새 디렉토리에 log 파일을 만들고 기록합니다. 기존 log 파일은 그대로 남아 있습니다.
작업 디렉토리는 이미 만들어져 있어야 하고, Write permission에 주의하세요. 존재하지 않는 디렉토리를 지정하면 다음과 같은 에러가 발생합니다.
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 파일에도 기록됩니다.
분류 | Parameter name | Value | Config set Supported |
---|---|---|---|
일반 Genernal | databases | 16 | X |
logfile | redis.log | X | |
pidfile | /var/run/redis.pid | X | |
daemonize | yes | X | |
bind | X | ||
port | 5051 | X | |
tcp-backlog | 511 | X | |
AOF | aof-load-truncated | yes | O |
aof-rewrite-incremental-fsync | yes | O | |
appendfsync | everysec | O | |
appendonly | yes | O | |
auto-aof-rewrite-min-size | 67108864 | O | |
auto-aof-rewrite-percentage | 100 | O | |
no-appendfsync-on-rewrite | no | O | |
RDB | dbfilename | dump.rdb | O |
rdbchecksum | yes | X | |
rdbcompression | yes | O | |
save | O | ||
stop-writes-on-bgsave-error | yes | O | |
복제 Replication | slaveof | X | |
slave-read-only | yes | O | |
slave-priority | 100 | O | |
slave-serve-stale-data | yes | O | |
repl-backlog-size | 1048576 | O | |
repl-backlog-ttl | 3600 | O | |
repl-disable-tcp-nodelay | no | O | |
repl-diskless-sync | no | O | |
repl-diskless-sync-delay | 5 | O | |
repl-ping-slave-period | 10 | O | |
repl-timeout | 60 | O | |
min-slaves-max-lag | 10 | O | |
min-slaves-to-write | 0 | O | |
메모리 Memory | maxmemory | 0 | O |
maxmemory-policy | noeviction | O | |
maxmemory-samples | 5 | O | |
클러스터 Cluster | cluster-migration-barrier | 1 | O |
cluster-node-timeout | 15000 | O | |
cluster-require-full-coverage | yes | O | |
cluster-slave-validity-factor | 10 | O | |
기타 Etc | dir | /home/redis/redis-3.0.2/5051 | O |
loglevel | notice | O | |
tcp-keepalive | 0 | O | |
timeout | 0 | O | |
client-output-buffer-limit | normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60 | O | |
maxclients | 10000 | O | |
list-max-ziplist-entries | 512 | O | |
list-max-ziplist-value | 64 | O | |
hash-max-ziplist-entries | 512 | O | |
hash-max-ziplist-value | 64 | O | |
set-max-intset-entries | 512 | O | |
zset-max-ziplist-entries | 128 | O | |
zset-max-ziplist-value | 64 | O | |
activerehashing | yes | O | |
hll-sparse-max-bytes | 3000 | O | |
hz | 10 | O | |
latency-monitor-threshold | 0 | O | |
requirepass | O | ||
masterauth | O | ||
notify-keyspace-events | O | ||
slowlog-log-slower-than | 10000 | O | |
slowlog-max-len | 128 | O | |
unixsocket | X | ||
unixsocketperm | 0 | X | |
lua-time-limit | 5000 | O | |
모니터 | watchdog-period | 0 | O |
명령문
CONFIG SET parameter value
- 이 명령은 version 2.0.0 부터 사용할 수 있다.
- 이 명령을 실행하면 로그(redis.log) 파일에 로그를 남긴다. 엔터프라이즈 6.0.3 부터 적용.
Clients for C | Hiredis |
<< CONFIG GET | CONFIG SET | CONFIG REWRITE >> |
---|
조회수 :