Redis动态修改配置实现热更新

240人浏览 / 0人评论

在redis的使用过程中,有时候需要急需修改redis的配置,比如在业务运行的情况下,内存不够怎么办,这时要么赶紧删除无用的内存,要么扩展内存。如果有无用的内容可删除那么所有问题都已经解决。如果内容都是重要的,那只能选择扩展内存。说到扩展内存,redis为我们提供了一个命令。

CONFIG SET
CONFIG SET parameter value

CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。

你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。

CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生效。

关于 CONFIG SET 命令的更多消息,请参见命令 CONFIG GET 的说明。

关于如何使用 CONFIG SET 命令修改 Redis 持久化方式,请参见 Redis Persistence 。

可用版本:

>= 2.0.0

时间复杂度:

不明确

返回值:

当设置成功时返回 OK ,否则返回一个错误。

例如:动态添加内存,原来的内存大小为7g,现在改为9g。其中redis的配置文件中maxmemory的单位是byte

公式如下:

# 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# 内存配置大小写是一样的.比如 1gb 1Gb 1GB 1gB

所以如果要改为9g,则换算后为:9*1024*1024*1024=9635364864

redis 127.0.0.1:6381> config get maxmemory
1) "maxmemory"
2) "7516192768"
redis 127.0.0.1:6381> config set maxmemory 9635364864
OK
redis 127.0.0.1:6381> config get maxmemory
1) "maxmemory"
2) "9635364864"

我们看看那些参数 redis可以动态设置

127.0.0.1:6381> config get *
  1) "dbfilename"
  2) "dump_6381.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) "/data/redis/logs/redis_6381.log"
 11) "pidfile"
 12) "/var/run/redis.pid"
 13) "maxmemory"
 14) "9635364864"
 15) "maxmemory-samples"
 16) "3"
 17) "timeout"
 18) "0"
 19) "tcp-keepalive"
 20) "0"
 21) "auto-aof-rewrite-percentage"
 22) "100"
 23) "auto-aof-rewrite-min-size"
 24) "67108864"
 25) "hash-max-ziplist-entries"
 26) "512"
 27) "hash-max-ziplist-value"
 28) "64"
 29) "list-max-ziplist-entries"
 30) "512"
 31) "list-max-ziplist-value"
 32) "64"
 33) "set-max-intset-entries"
 34) "512"
 35) "zset-max-ziplist-entries"
 36) "128"
 37) "zset-max-ziplist-value"
 38) "64"
 39) "hll-sparse-max-bytes"
 40) "3000"
 41) "lua-time-limit"
 42) "5000"
 43) "slowlog-log-slower-than"
 44) "10000"
 45) "slowlog-max-len"
 46) "128"
 47) "port"
 48) "6381"
 49) "tcp-backlog"
 50) "511"
 51) "databases"
 52) "16"
 53) "repl-ping-slave-period"
 54) "10"
 55) "repl-timeout"
 56) "60"
 57) "repl-backlog-size"
 58) "1048576"
 59) "repl-backlog-ttl"
 60) "3600"
 61) "maxclients"
 62) "10000"
 63) "watchdog-period"
 64) "0"
 65) "slave-priority"
 66) "100"
 67) "min-slaves-to-write"
 68) "0"
 69) "min-slaves-max-lag"
 70) "10"
 71) "hz"
 72) "10"
 73) "no-appendfsync-on-rewrite"
 74) "yes"
 75) "slave-serve-stale-data"
 76) "yes"
 77) "slave-read-only"
 78) "yes"
 79) "stop-writes-on-bgsave-error"
 80) "yes"
 81) "daemonize"
 82) "yes"
 83) "rdbcompression"
 84) "yes"
 85) "rdbchecksum"
 86) "yes"
 87) "activerehashing"
 88) "yes"
 89) "repl-disable-tcp-nodelay"
 90) "no"
 91) "aof-rewrite-incremental-fsync"
 92) "yes"
 93) "appendonly"
 94) "yes"
 95) "dir"
 96) "/data/redis/dumps"
 97) "maxmemory-policy"
 98) "volatile-lru"
 99) "appendfsync"
100) "no"
101) "save"
102) ""
103) "loglevel"
104) "notice"
105) "client-output-buffer-limit"
106) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
107) "unixsocketperm"
108) "0"
109) "slaveof"
110) "192.168.113.113 6381"
111) "notify-keyspace-events"
112) ""
113) "bind"
114) ""

全部评论