一般情况下,Redis配置文件中提供了很多默认的选项,可以不做任何修改而直接使用,本文主要简述配置文件中常用的配置选项,仅供学习分享使用,如有不足之处,还请指正。
Redis启动方式
Redis的启动时,必须有一个配置文件与之相匹配(如:/root/myredis/redis.conf),如下所示:
1 [root@localhost bin]# ./redis-server /root/myredis/redis.conf
Redis配置文件详解
Redis配置文件项,主要分为以下几个部分:
- INCLUDES:一个配置文件,可以导入其他配置文件。
- MODULES:启动时加载的模块。
- NETWORK:网络相关配置。
- TLS/SSL:安全传输相关模块。
- GENERAL:通用配置相关。
- SNAPSHOTTING:快照配置相关。
- REPLICATION:主从复制相关配置项。
- KEYS TRACKING:键的追踪相关配置项。
- SECURITY:安全相关配置。
- CLIENTS:客户端相关配置。
- MEMORY MANAGEMENT:内存管理相关配置项。
- LAZY FREEING:延迟释放配置项。
- THREADED I/O:多线程I/O相关配置项。
- KERNEL OOM CONTROL:Linux内核防止内存占用过大配置选项。
- APPEND ONLY MODE:数据持久化追加模式。
- LUA SCRIPTING:Lua脚本相关配置项。
- REDIS CLUSTER:Redis集群相关配置项。
- CLUSTER DOCKER/NAT support:Docker/Nat集群支持配置项。
- SLOW LOG:耗时日志。
- LATENCY MONITOR:延迟监控配置相关选项。
- EVENT NOTIFICATION:事件通知相关配置项。
- GOPHER SERVER:Gopher服务器。
- ADVANCED CONFIG:高级配置。
- ACTIVE DEFRAGMENTATION:活动碎片整理相关配置。
说明:Redis配置文件,以# 开头,表示注释或者说明;如启用,则将#去掉即可。
INCLUDES
如果redis启动时有一个标准的配置模板,但是又需要自定义每一个实例的相关配置,则可以采用include 配置文件的方式导入。默认不需要导入文件,则此处是注释的。如下所示:
1 # include /path/to/local.conf 2 # include /path/to/other.conf
MODULES
启动时加载需要启动的模块,默认不需要启动,所以也是注释的。如下所示:
1 loadmodule /path/to/my_module.so 2 loadmodule /path/to/other_module.so
NETWORK
NETWORK主要用于配置网络相关的项,具体如下所示:
bind配置可以访问的ip地址,可以配置多个,一般建议局域网内部ip。如果是在internet下运行redis,并绑定了所有的ip地址,则是非常危险的操作。
如果需要所有ip都可以访问,则可以注释掉下面的语句。如下所示:
Examples: # 3 bind 192.168.1.100 10.0.0.1 4 bind 127.0.0.1 ::1 5 6 bind 127.0.0.1
port指定redis启动时的端口号,默认6379,不建议使用1000以下的端口号,因为容易与操作系统端口号引起冲突。如下所示:
Accept connections on the specified port,default is 6379 (IANA #815344). If port 0 is specified Redis will not listen on a TCP socket. 3 port 6379
tcp-backlog配置完整连接队列的大小,默认511,但是此值一般不能大于/proc/sys/net/core/somaxconn 配置的值。如下所示:
In high requests-per-second environments you need a high backlog in order to avoid slow clients connection issues. Note that the Linux kernel will silently truncate it to the value of /proc/sys/net/core/somaxconn so make sure to raise both the value of somaxconn and tcp_max_syn_backlog 5 in order to get the desired effect. 6 tcp-backlog 511
关于/proc/sys/net/core/somaxconn的值,如下所示:
cat /proc/sys/net/core/somaxconn 2 128
timeout设置超时时间,用于设置客户端多久没连接则断开连接人时间,0表示失效。如下所示:
Close the connection after a client is idle for N seconds (0 to disable) 2 timeout 0
tcp-keepalive设置保持连接时长,超过时间,则发送TCP ACK到客户端,如下所示:
A reasonable value for this option is 300 seconds,which is the new Redis default starting with Redis 3.2.1. 3 tcp-keepalive 300
GENERAL
daemonize用于配置redis是否以守护进程运行,默认为no,启动时会单独启动一个窗口,当窗口关闭时,redis进程结束。所以为了让redis在后台运行,需要将此项改为yes。如下所示:
By default Redis does not run as a daemon. Use 'yes' if you need it. Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 3 daemonize yes
pidfile配置进程文件,当redis以守护进行启动时,会在启动时生成,关闭时删除启动文件,如下所示:
1 If a pid file is specified,Redis writes it where specified at startup 2 and removes it at exit. 3 4 When the server runs non daemonized,no pid file is created if none is 5 specified in the configuration. When the server is daemonized,the pid file 6 is used even if not specified,defaulting to "/var/run/redis.pid". 7 8 Creating a pid file is best effort: if Redis is not able to create it 9 nothing bad happens,the server will start and run normally. 10 pidfile /var/run/redis_6379.pid
loglevel日志等级,共四种等级:debug,verbose,notice,warning默认为notice,如下所示:
Specify the server verbosity level. This can be one of: debug (a lot of information,useful for development/testing) verbose (many rarely useful info,but not a mess like the debug level) notice (moderately verbose,what you want in production probably) 6 warning (only very important / critical messages are logged) 7 loglevel notice
logfile日志文件配置,默认为空,则不记录日志,如下所示:
Specify the log file name. Also the empty string can be used to force Redis to log on the standard output. Note that if you use standard output for logging but daemonize,logs will be sent to /dev/null 4 logfile ""
syslog-enabled是否记录系统日志,默认不记录,如下所示:
To enable logging to the system logger,just set 'syslog-enabled' to yes, and optionally update the other syslog parameters to suit your needs. syslog-enabled no 4 Specify the syslog identity. syslog-ident redis 7 8 Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. 9 syslog-facility local0
databases数据库个数,redis默认共有16个数据库,默认是0,如下所示:
Set the number of databases. The default database is DB 0,you can select a different one on a per-connection basis using SELECT <dbid> where dbid is a number between 0 and 'databases'-1 4 databases 16
always-show-logo设置logo是否显示,默认为yes,如下所示:
By default Redis shows an ASCII art logo only when started to log to the standard output and if the standard output is a TTY. Basically this means that normally a logo is displayed only in interactive sessions. However it is possible to force the pre-4.0 behavior and always show a ASCII art logo in startup logs by setting the following option to yes. 7 always-show-logo yes
SNAPSHOTTING
快照主要用于将内存中的数据保存到硬盘上。
save命令,配置多久保存一次,可以设置多种模式,如下所示:
Save the DB on disk: save <seconds> <changes> Will save the DB if both the given number of seconds and the given number of write operations against the DB occurred. In the example below the behavior will be to save: after 900 sec (15 min) if at least 1 key changed 10 after 300 sec (5 min) if at least 10 keys changed 11 after 60 sec if at least 10000 keys changed 12 13 save 900 1 14 save 300 10 15 save 60 10000
stop-writes-on-bgsave-error 当正在保存或者错误时,是否停止写入,默认为yes,如下所示:
However if you have setup your proper monitoring of the Redis server and persistence,you may want to disable this feature so that Redis will continue to work as usual even if there are problems with disk,1)"> permissions,and so forth. 5 stop-writes-on-bgsave-error yes
rdbcompression 快照文件是否压缩,如果不压缩,则数据库文件将会很大,如下所示:
Compress string objects using LZF when dump .rdb databases? By default compression is enabled as it's almost always a win. If you want to save some CPU in the saving child set it to 'no' but the dataset will likely be bigger if you have compressible values or keys. 5 rdbcompression yes
dbfilename数据库文件名,默认为dump.rdb。如下所示:
The filename where to dump the DB 2 dbfilename dump.rdb
dir数据库文件的保存目录,如下所示:
The working directory. The DB will be written inside this directory,with the filename specified above using the 'dbfilename' configuration directive. The Append Only File will also be created inside this directory. 7 Note that you must specify a directory here,not a file name. 9 dir ./
SECURITY
requirepass设置默认用户登录的密码,默认无密码,如下所示:
IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility layer on top of the new ACL system. The option effect will be just setting the password for the default user. Clients will still authenticate using AUTH <password> as usually,or more explicitly with AUTH default <password> if they follow the new protocol: both will work. requirepass foobared
CLIENTS
maxclients同一时间允许连接的最大客户端数,如下所示:
Set the max number of connected clients at the same time. By default this limit is set to 10000 clients,however if the Redis server is not able to configure the process file limit to allow for the specified limit the max number of allowed clients is set to the current file limit minus 32 (as Redis reserves a few file descriptors for internal uses). Once the limit is reached Redis will close all the new connections sending an error 'max number of clients reached'. maxclients 10000
当配置redis集群时,redis连接数和集群总线共享。
Redis命令模式配置
redis除了可以通过修改配置文件的方式变更配置项,也可以通过客户端进行修改。示例如下:
config get * 用于获取所有的配置项,如下所示:
1 127.0.0.1:6379> config get * 2 1) "rdbchecksum" 3 2) yes 4 3) daemonize 5 4) 6 5) io-threads-do-reads 7 6) no 8 7) lua-replicate-commands 9 8) 10 9) always-show-logo 11 10) 12 11) protected-mode 13 12) 14 13) rdbcompression 15 14) 16 15) rdb-del-sync-files 17 16) 18 17) activerehashing 19 18) 20 19) stop-writes-on-bgsave-error 21 20) 22 21) dynamic-hz 23 22) 24 23) lazyfree-lazy-eviction 25 24) 26 25) lazyfree-lazy-expire 27 26) 28 27) lazyfree-lazy-server-del 29 28) 30 29) lazyfree-lazy-user-del 31 30) 32 31) repl-disable-tcp-nodelay 33 32) 34 33) repl-diskless-sync 35 34) 36 35) gopher-enabled 37 36) 38 37) aof-rewrite-incremental-fsync 39 38) 40 39) no-appendfsync-on-rewrite 41 40) 42 41) cluster-require-full-coverage 43 42) 44 43) rdb-save-incremental-fsync 45 44) 46 45) aof-load-truncated 47 46) 48 47) aof-use-rdb-preamble 49 48) 50 49) cluster-replica-no-failover 51 50) 52 51) cluster-slave-no-failover 53 52) 54 53) replica-lazy-flush 55 54) 56 55) slave-lazy-flush 57 56) 58 57) replica-serve-stale-data 59 58) 60 59) slave-serve-stale-data 61 60) 62 61) replica-read-only 63 62) 64 63) slave-read-only 65 64) 66 65) replica-ignore-maxmemory 67 66) 68 67) slave-ignore-maxmemory 69 68) 70 69) jemalloc-bg-thread 71 70) 72 71) activedefrag 73 72) 74 73) syslog-enabled 75 74) 76 75) cluster-enabled 77 76) 78 77) appendonly 79 78) 80 79) cluster-allow-reads-when-down 81 80) 82 81) oom-score-adj 83 82) 84 83) aclfile 85 84) "" 86 85) unixsocket 87 86) 88 87) pidfile 89 88) /var/run/redis_6379.pid 90 89) replica-announce-ip 91 90) 92 91) slave-announce-ip 93 92) 94 93) masteruser 95 94) 96 95) masterauth 97 96) 98 97) cluster-announce-ip 99 98) 100 99) syslog-ident101 100) redis102 101) dbfilename103 102) dump.rdb104 103) appendfilename105 104) appendonly.aof106 105) server_cpulist107 106) 108 107) bio_cpulist109 108) 110 109) aof_rewrite_cpulist111 110) 112 111) bgsave_cpulist113 112) 114 113) supervised115 114) 116 115) syslog-facility117 116) local0118 117) repl-diskless-load119 118) disabled120 119) loglevel121 120) notice122 121) maxmemory-policy123 122) noeviction124 123) appendfsync125 124) everysec126 125) databases127 126) 16128 127) port129 128) 6379130 129) io-threads131 130) 1132 131) auto-aof-rewrite-percentage133 132) 100134 133) cluster-replica-validity-factor135 134) 10136 135) cluster-slave-validity-factor137 136) 138 137) list-max-ziplist-size139 138) -2140 139) tcp-keepalive141 140) 300142 141) cluster-migration-barrier143 142) 144 143) active-defrag-cycle-min145 144) 146 145) active-defrag-cycle-max147 146) 25148 147) active-defrag-threshold-lower149 148) 150 149) active-defrag-threshold-upper151 150) 152 151) lfu-log-factor153 152) 154 153) lfu-decay-time155 154) 156 155) replica-priority157 156) 158 157) slave-priority159 158) 160 159) repl-diskless-sync-delay161 160) 5162 161) maxmemory-samples163 162) 164 163) timeout165 164) 0166 165) replica-announce-port167 166) 168 167) slave-announce-port169 168) 170 169) tcp-backlog171 170) 511172 171) cluster-announce-bus-port173 172) 174 173) cluster-announce-port175 174) 176 175) repl-timeout177 176) 60178 177) repl-ping-replica-period179 178) 180 179) repl-ping-slave-period181 180) 182 181) list-compress-depth183 182) 184 183) rdb-key-save-delay185 184) 186 185) key-load-delay187 186) 188 187) active-expire-effort189 188) 190 189) hz191 190) 192 191) min-replicas-to-write193 192) 194 193) min-slaves-to-write195 194) 196 195) min-replicas-max-lag197 196) 198 197) min-slaves-max-lag199 198) 200 199) maxclients201 200) 10000202 201) active-defrag-max-scan-fields203 202) 1000204 203) slowlog-max-len205 204) 128206 205) acllog-max-len207 206) 208 207) lua-time-limit209 208) 5000210 209) cluster-node-timeout211 210) 15000212 211) slowlog-log-slower-than213 212) 214 213) latency-monitor-threshold215 214) 216 215) proto-max-bulk-len217 216) 536870912218 217) stream-node-max-entries219 218) 220 219) repl-backlog-size221 220) 1048576222 221) maxmemory223 222) 224 223) hash-max-ziplist-entries225 224) 512226 225) set-max-intset-entries227 226) 228 227) zset-max-ziplist-entries229 228) 230 229) active-defrag-ignore-bytes231 230) 104857600232 231) hash-max-ziplist-value233 232) 64234 233) stream-node-max-bytes235 234) 4096236 235) zset-max-ziplist-value237 236) 238 237) hll-sparse-max-bytes239 238) 3000240 239) tracking-table-max-keys241 240) 1000000242 241) repl-backlog-ttl243 242) 3600244 243) auto-aof-rewrite-min-size245 244) 67108864246 245) logfile247 246) 248 247) client-query-buffer-limit249 248) 1073741824250 249) watchdog-period251 250) 252 251) dir253 252) /usr/local/redis/bin254 253) save255 254) 900 1 300 10 60 10000256 255) client-output-buffer-limit257 256) normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60258 257) unixsocketperm259 258) 260 259) slaveof261 260) 262 261) notify-keyspace-events263 262) 264 263) bind265 264) 127.0.0.1266 265) requirepass267 266) 268 267) oom-score-adj-values269 268) 0 200 800"
config get setting-name,获取单独的配置项,如loglevel,如下所示:
1 127.0.0.1:6379> config get loglevel 2 1) 3 2) 4 127.0.0.1:6379>
config set setting-name setting-value的格式来设置项,如下所示:
config set loglevel verbose OK 3 127.0.0.1:6379>4 1) 5 2) verbose6 127.0.0.1:6379>
本文主要简述常见配置,更多配置,可参考菜鸟教程。
备注
洞仙歌·冰肌玉骨