blob: 82332493b5e06cfb0dd8ce23aed120436a5bf516 [file] [log] [blame]
Jiarenxiang25a45b72025-03-13 16:09:13 +08001# Redis configuration file example
2
3# Note on units: when memory size is needed, it is possible to specify
4# it in the usual form of 1k 5GB 4M and so forth:
5#
6# 1k => 1000 bytes
7# 1kb => 1024 bytes
8# 1m => 1000000 bytes
9# 1mb => 1024*1024 bytes
10# 1g => 1000000000 bytes
11# 1gb => 1024*1024*1024 bytes
12#
13# units are case insensitive so 1GB 1Gb 1gB are all the same.
14
15################################## INCLUDES ###################################
16
17# Include one or more other config files here. This is useful if you
18# have a standard template that goes to all Redis servers but also need
19# to customize a few per-server settings. Include files can include
20# other files, so use this wisely.
21#
22# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
23# from admin or Redis Sentinel. Since Redis always uses the last processed
24# line as value of a configuration directive, you'd better put includes
25# at the beginning of this file to avoid overwriting config change at runtime.
26#
27# If instead you are interested in using includes to override configuration
28# options, it is better to use include as the last line.
29#
30# include .\path\to\local.conf
31# include c:\path\to\other.conf
32
33################################## MODULES #####################################
34
35# Load modules at startup. If the server is not able to load modules
36# it will abort. It is possible to use multiple loadmodule directives.
37#
38# loadmodule .\path\to\my_module.dll
39# loadmodule c:\path\to\other_module.dll
40
41################################## NETWORK #####################################
42
43# By default, if no "bind" configuration directive is specified, Redis listens
44# for connections from all the network interfaces available on the server.
45# It is possible to listen to just one or multiple selected interfaces using
46# the "bind" configuration directive, followed by one or more IP addresses.
47#
48# Examples:
49#
50# bind 192.168.1.100 10.0.0.1
51# bind 127.0.0.1 ::1
52#
53# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
54# internet, binding to all the interfaces is dangerous and will expose the
55# instance to everybody on the internet. So by default we uncomment the
56# following bind directive, that will force Redis to listen only into
57# the IPv4 loopback interface address (this means Redis will be able to
58# accept connections only from clients running into the same computer it
59# is running).
60#
61# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
62# JUST COMMENT THE FOLLOWING LINE.
63# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64bind 127.0.0.1
65
66# Protected mode is a layer of security protection, in order to avoid that
67# Redis instances left open on the internet are accessed and exploited.
68#
69# When protected mode is on and if:
70#
71# 1) The server is not binding explicitly to a set of addresses using the
72# "bind" directive.
73# 2) No password is configured.
74#
75# The server only accepts connections from clients connecting from the
76# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
77# sockets.
78#
79# By default protected mode is enabled. You should disable it only if
80# you are sure you want clients from other hosts to connect to Redis
81# even if no authentication is configured, nor a specific set of interfaces
82# are explicitly listed using the "bind" directive.
83protected-mode yes
84
85# Accept connections on the specified port, default is 6379 (IANA #815344).
86# If port 0 is specified Redis will not listen on a TCP socket.
87port 6379
88
89# TCP listen() backlog.
90#
91# In high requests-per-second environments you need an high backlog in order
92# to avoid slow clients connections issues. Note that the Linux kernel
93# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
94# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
95# in order to get the desired effect.
96tcp-backlog 511
97
98# Unix socket.
99#
100# Specify the path for the Unix socket that will be used to listen for
101# incoming connections. There is no default, so Redis will not listen
102# on a unix socket when not specified.
103#
104# unixsocket /tmp/redis.sock
105# unixsocketperm 700
106
107# Close the connection after a client is idle for N seconds (0 to disable)
108timeout 0
109
110# TCP keepalive.
111#
112# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
113# of communication. This is useful for two reasons:
114#
115# 1) Detect dead peers.
116# 2) Take the connection alive from the point of view of network
117# equipment in the middle.
118#
119# On Linux, the specified value (in seconds) is the period used to send ACKs.
120# Note that to close the connection the double of the time is needed.
121# On other kernels the period depends on the kernel configuration.
122#
123# A reasonable value for this option is 300 seconds, which is the new
124# Redis default starting with Redis 3.2.1.
125tcp-keepalive 300
126
127################################# GENERAL #####################################
128
129# By default Redis does not run as a daemon. Use 'yes' if you need it.
130# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
131# NOT SUPPORTED ON WINDOWS daemonize no
132
133# If you run Redis from upstart or systemd, Redis can interact with your
134# supervision tree. Options:
135# supervised no - no supervision interaction
136# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
137# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
138# supervised auto - detect upstart or systemd method based on
139# UPSTART_JOB or NOTIFY_SOCKET environment variables
140# Note: these supervision methods only signal "process is ready."
141# They do not enable continuous liveness pings back to your supervisor.
142# NOT SUPPORTED ON WINDOWS supervised no
143
144# If a pid file is specified, Redis writes it where specified at startup
145# and removes it at exit.
146#
147# When the server runs non daemonized, no pid file is created if none is
148# specified in the configuration. When the server is daemonized, the pid file
149# is used even if not specified, defaulting to "/var/run/redis.pid".
150#
151# Creating a pid file is best effort: if Redis is not able to create it
152# nothing bad happens, the server will start and run normally.
153# NOT SUPPORTED ON WINDOWS pidfile /var/run/redis.pid
154
155# Specify the server verbosity level.
156# This can be one of:
157# debug (a lot of information, useful for development/testing)
158# verbose (many rarely useful info, but not a mess like the debug level)
159# notice (moderately verbose, what you want in production probably)
160# warning (only very important / critical messages are logged)
161loglevel notice
162
163# Specify the log file name. Also 'stdout' can be used to force
164# Redis to log on the standard output.
165logfile ""
166
167# To enable logging to the Windows EventLog, just set 'syslog-enabled' to
168# yes, and optionally update the other syslog parameters to suit your needs.
169# If Redis is installed and launched as a Windows Service, this will
170# automatically be enabled.
171# syslog-enabled no
172
173# Specify the source name of the events in the Windows Application log.
174# syslog-ident redis
175
176# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
177# NOT SUPPORTED ON WINDOWS syslog-facility local0
178
179# Set the number of databases. The default database is DB 0, you can select
180# a different one on a per-connection basis using SELECT <dbid> where
181# dbid is a number between 0 and 'databases'-1
182databases 16
183
184# By default Redis shows an ASCII art logo only when started to log to the
185# standard output and if the standard output is a TTY. Basically this means
186# that normally a logo is displayed only in interactive sessions.
187#
188# However it is possible to force the pre-4.0 behavior and always show a
189# ASCII art logo in startup logs by setting the following option to yes.
190always-show-logo yes
191
192################################ SNAPSHOTTING ################################
193#
194# Save the DB on disk:
195#
196# save <seconds> <changes>
197#
198# Will save the DB if both the given number of seconds and the given
199# number of write operations against the DB occurred.
200#
201# In the example below the behaviour will be to save:
202# after 900 sec (15 min) if at least 1 key changed
203# after 300 sec (5 min) if at least 10 keys changed
204# after 60 sec if at least 10000 keys changed
205#
206# Note: you can disable saving completely by commenting out all "save" lines.
207#
208# It is also possible to remove all the previously configured save
209# points by adding a save directive with a single empty string argument
210# like in the following example:
211#
212# save ""
213
214save 900 1
215save 300 10
216save 60 10000
217
218# By default Redis will stop accepting writes if RDB snapshots are enabled
219# (at least one save point) and the latest background save failed.
220# This will make the user aware (in a hard way) that data is not persisting
221# on disk properly, otherwise chances are that no one will notice and some
222# disaster will happen.
223#
224# If the background saving process will start working again Redis will
225# automatically allow writes again.
226#
227# However if you have setup your proper monitoring of the Redis server
228# and persistence, you may want to disable this feature so that Redis will
229# continue to work as usual even if there are problems with disk,
230# permissions, and so forth.
231stop-writes-on-bgsave-error yes
232
233# Compress string objects using LZF when dump .rdb databases?
234# For default that's set to 'yes' as it's almost always a win.
235# If you want to save some CPU in the saving child set it to 'no' but
236# the dataset will likely be bigger if you have compressible values or keys.
237rdbcompression yes
238
239# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
240# This makes the format more resistant to corruption but there is a performance
241# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
242# for maximum performances.
243#
244# RDB files created with checksum disabled have a checksum of zero that will
245# tell the loading code to skip the check.
246rdbchecksum yes
247
248# The filename where to dump the DB
249dbfilename dump.rdb
250
251# The working directory.
252#
253# The DB will be written inside this directory, with the filename specified
254# above using the 'dbfilename' configuration directive.
255#
256# The Append Only File will also be created inside this directory.
257#
258# Note that you must specify a directory here, not a file name.
259dir ./
260
261################################# REPLICATION #################################
262
263# Master-Replica replication. Use replicaof to make a Redis instance a copy of
264# another Redis server. A few things to understand ASAP about Redis replication.
265#
266# +------------------+ +---------------+
267# | Master | ---> | Replica |
268# | (receive writes) | | (exact copy) |
269# +------------------+ +---------------+
270#
271# 1) Redis replication is asynchronous, but you can configure a master to
272# stop accepting writes if it appears to be not connected with at least
273# a given number of replicas.
274# 2) Redis replicas are able to perform a partial resynchronization with the
275# master if the replication link is lost for a relatively small amount of
276# time. You may want to configure the replication backlog size (see the next
277# sections of this file) with a sensible value depending on your needs.
278# 3) Replication is automatic and does not need user intervention. After a
279# network partition replicas automatically try to reconnect to masters
280# and resynchronize with them.
281#
282# replicaof <masterip> <masterport>
283
284# If the master is password protected (using the "requirepass" configuration
285# directive below) it is possible to tell the replica to authenticate before
286# starting the replication synchronization process, otherwise the master will
287# refuse the replica request.
288#
289# masterauth <master-password>
290
291# When a replica loses its connection with the master, or when the replication
292# is still in progress, the replica can act in two different ways:
293#
294# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will
295# still reply to client requests, possibly with out of date data, or the
296# data set may just be empty if this is the first synchronization.
297#
298# 2) if replica-serve-stale-data is set to 'no' the replica will reply with
299# an error "SYNC with master in progress" to all the kind of commands
300# but to INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,
301# SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,
302# COMMAND, POST, HOST: and LATENCY.
303#
304replica-serve-stale-data yes
305
306# You can configure a replica instance to accept writes or not. Writing against
307# a replica instance may be useful to store some ephemeral data (because data
308# written on a replica will be easily deleted after resync with the master) but
309# may also cause problems if clients are writing to it because of a
310# misconfiguration.
311#
312# Since Redis 2.6 by default replicas are read-only.
313#
314# Note: read only replicas are not designed to be exposed to untrusted clients
315# on the internet. It's just a protection layer against misuse of the instance.
316# Still a read only replica exports by default all the administrative commands
317# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
318# security of read only replicas using 'rename-command' to shadow all the
319# administrative / dangerous commands.
320replica-read-only yes
321
322# Replication SYNC strategy: disk or socket.
323#
324# -------------------------------------------------------
325# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
326# -------------------------------------------------------
327#
328# New replicas and reconnecting replicas that are not able to continue the replication
329# process just receiving differences, need to do what is called a "full
330# synchronization". An RDB file is transmitted from the master to the replicas.
331# The transmission can happen in two different ways:
332#
333# 1) Disk-backed: The Redis master creates a new process that writes the RDB
334# file on disk. Later the file is transferred by the parent
335# process to the replicas incrementally.
336# 2) Diskless: The Redis master creates a new process that directly writes the
337# RDB file to replica sockets, without touching the disk at all.
338#
339# With disk-backed replication, while the RDB file is generated, more replicas
340# can be queued and served with the RDB file as soon as the current child producing
341# the RDB file finishes its work. With diskless replication instead once
342# the transfer starts, new replicas arriving will be queued and a new transfer
343# will start when the current one terminates.
344#
345# When diskless replication is used, the master waits a configurable amount of
346# time (in seconds) before starting the transfer in the hope that multiple replicas
347# will arrive and the transfer can be parallelized.
348#
349# With slow disks and fast (large bandwidth) networks, diskless replication
350# works better.
351repl-diskless-sync no
352
353# When diskless replication is enabled, it is possible to configure the delay
354# the server waits in order to spawn the child that transfers the RDB via socket
355# to the replicas.
356#
357# This is important since once the transfer starts, it is not possible to serve
358# new replicas arriving, that will be queued for the next RDB transfer, so the server
359# waits a delay in order to let more replicas arrive.
360#
361# The delay is specified in seconds, and by default is 5 seconds. To disable
362# it entirely just set it to 0 seconds and the transfer will start ASAP.
363repl-diskless-sync-delay 5
364
365# Replicas send PINGs to server in a predefined interval. It's possible to change
366# this interval with the repl_ping_replica_period option. The default value is 10
367# seconds.
368#
369# repl-ping-replica-period 10
370
371# The following option sets the replication timeout for:
372#
373# 1) Bulk transfer I/O during SYNC, from the point of view of replica.
374# 2) Master timeout from the point of view of replicas (data, pings).
375# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings).
376#
377# It is important to make sure that this value is greater than the value
378# specified for repl-ping-replica-period otherwise a timeout will be detected
379# every time there is low traffic between the master and the replica.
380#
381# repl-timeout 60
382
383# Disable TCP_NODELAY on the replica socket after SYNC?
384#
385# If you select "yes" Redis will use a smaller number of TCP packets and
386# less bandwidth to send data to replicas. But this can add a delay for
387# the data to appear on the replica side, up to 40 milliseconds with
388# Linux kernels using a default configuration.
389#
390# If you select "no" the delay for data to appear on the replica side will
391# be reduced but more bandwidth will be used for replication.
392#
393# By default we optimize for low latency, but in very high traffic conditions
394# or when the master and replicas are many hops away, turning this to "yes" may
395# be a good idea.
396repl-disable-tcp-nodelay no
397
398# Set the replication backlog size. The backlog is a buffer that accumulates
399# replica data when replicas are disconnected for some time, so that when a replica
400# wants to reconnect again, often a full resync is not needed, but a partial
401# resync is enough, just passing the portion of data the replica missed while
402# disconnected.
403#
404# The bigger the replication backlog, the longer the time the replica can be
405# disconnected and later be able to perform a partial resynchronization.
406#
407# The backlog is only allocated once there is at least a replica connected.
408#
409# repl-backlog-size 1mb
410
411# After a master has no longer connected replicas for some time, the backlog
412# will be freed. The following option configures the amount of seconds that
413# need to elapse, starting from the time the last replica disconnected, for
414# the backlog buffer to be freed.
415#
416# Note that replicas never free the backlog for timeout, since they may be
417# promoted to masters later, and should be able to correctly "partially
418# resynchronize" with the replicas: hence they should always accumulate backlog.
419#
420# A value of 0 means to never release the backlog.
421#
422# repl-backlog-ttl 3600
423
424# The replica priority is an integer number published by Redis in the INFO output.
425# It is used by Redis Sentinel in order to select a replica to promote into a
426# master if the master is no longer working correctly.
427#
428# A replica with a low priority number is considered better for promotion, so
429# for instance if there are three replicas with priority 10, 100, 25 Sentinel will
430# pick the one with priority 10, that is the lowest.
431#
432# However a special priority of 0 marks the replica as not able to perform the
433# role of master, so a replica with priority of 0 will never be selected by
434# Redis Sentinel for promotion.
435#
436# By default the priority is 100.
437replica-priority 100
438
439# It is possible for a master to stop accepting writes if there are less than
440# N replicas connected, having a lag less or equal than M seconds.
441#
442# The N replicas need to be in "online" state.
443#
444# The lag in seconds, that must be <= the specified value, is calculated from
445# the last ping received from the replica, that is usually sent every second.
446#
447# This option does not GUARANTEE that N replicas will accept the write, but
448# will limit the window of exposure for lost writes in case not enough replicas
449# are available, to the specified number of seconds.
450#
451# For example to require at least 3 replicas with a lag <= 10 seconds use:
452#
453# min-replicas-to-write 3
454# min-replicas-max-lag 10
455#
456# Setting one or the other to 0 disables the feature.
457#
458# By default min-replicas-to-write is set to 0 (feature disabled) and
459# min-replicas-max-lag is set to 10.
460
461# A Redis master is able to list the address and port of the attached
462# replicas in different ways. For example the "INFO replication" section
463# offers this information, which is used, among other tools, by
464# Redis Sentinel in order to discover replica instances.
465# Another place where this info is available is in the output of the
466# "ROLE" command of a master.
467#
468# The listed IP and address normally reported by a replica is obtained
469# in the following way:
470#
471# IP: The address is auto detected by checking the peer address
472# of the socket used by the replica to connect with the master.
473#
474# Port: The port is communicated by the replica during the replication
475# handshake, and is normally the port that the replica is using to
476# listen for connections.
477#
478# However when port forwarding or Network Address Translation (NAT) is
479# used, the replica may be actually reachable via different IP and port
480# pairs. The following two options can be used by a replica in order to
481# report to its master a specific set of IP and port, so that both INFO
482# and ROLE will report those values.
483#
484# There is no need to use both the options if you need to override just
485# the port or the IP address.
486#
487# replica-announce-ip 5.5.5.5
488# replica-announce-port 1234
489
490################################## SECURITY ###################################
491
492# Require clients to issue AUTH <PASSWORD> before processing any other
493# commands. This might be useful in environments in which you do not trust
494# others with access to the host running redis-server.
495#
496# This should stay commented out for backward compatibility and because most
497# people do not need auth (e.g. they run their own servers).
498#
499# Warning: since Redis is pretty fast an outside user can try up to
500# 150k passwords per second against a good box. This means that you should
501# use a very strong password otherwise it will be very easy to break.
502#
503# requirepass foobared
504
505# Command renaming.
506#
507# It is possible to change the name of dangerous commands in a shared
508# environment. For instance the CONFIG command may be renamed into something
509# hard to guess so that it will still be available for internal-use tools
510# but not available for general clients.
511#
512# Example:
513#
514# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
515#
516# It is also possible to completely kill a command by renaming it into
517# an empty string:
518#
519# rename-command CONFIG ""
520#
521# Please note that changing the name of commands that are logged into the
522# AOF file or transmitted to replicas may cause problems.
523
524################################### CLIENTS ####################################
525
526# Set the max number of connected clients at the same time. By default
527# this limit is set to 10000 clients, however if the Redis server is not
528# able to configure the process file limit to allow for the specified limit
529# the max number of allowed clients is set to the current file limit
530# minus 32 (as Redis reserves a few file descriptors for internal uses).
531#
532# Once the limit is reached Redis will close all the new connections sending
533# an error 'max number of clients reached'.
534#
535# maxclients 10000
536
537############################## MEMORY MANAGEMENT ################################
538
539# If Redis is to be used as an in-memory-only cache without any kind of
540# persistence, then the fork() mechanism used by the background AOF/RDB
541# persistence is unnecessary. As an optimization, all persistence can be
542# turned off in the Windows version of Redis. This will redirect heap
543# allocations to the system heap allocator, and disable commands that would
544# otherwise cause fork() operations: BGSAVE and BGREWRITEAOF.
545# This flag may not be combined with any of the other flags that configure
546# AOF and RDB operations.
547# persistence-available [(yes)|no]
548
549# Set a memory usage limit to the specified amount of bytes.
550# When the memory limit is reached Redis will try to remove keys
551# according to the eviction policy selected (see maxmemory-policy).
552#
553# If Redis can't remove keys according to the policy, or if the policy is
554# set to 'noeviction', Redis will start to reply with errors to commands
555# that would use more memory, like SET, LPUSH, and so on, and will continue
556# to reply to read-only commands like GET.
557#
558# This option is usually useful when using Redis as an LRU or LFU cache, or to
559# set a hard memory limit for an instance (using the 'noeviction' policy).
560#
561# WARNING: If you have replicas attached to an instance with maxmemory on,
562# the size of the output buffers needed to feed the replicas are subtracted
563# from the used memory count, so that network problems / resyncs will
564# not trigger a loop where keys are evicted, and in turn the output
565# buffer of replicas is full with DELs of keys evicted triggering the deletion
566# of more keys, and so forth until the database is completely emptied.
567#
568# In short... if you have replicas attached it is suggested that you set a lower
569# limit for maxmemory so that there is some free RAM on the system for replica
570# output buffers (but this is not needed if the policy is 'noeviction').
571#
572# WARNING: not setting maxmemory will cause Redis to terminate with an
573# out-of-memory exception if the heap limit is reached.
574#
575# NOTE: since Redis uses the system paging file to allocate the heap memory,
576# the Working Set memory usage showed by the Windows Task Manager or by other
577# tools such as ProcessExplorer will not always be accurate. For example, right
578# after a background save of the RDB or the AOF files, the working set value
579# may drop significantly. In order to check the correct amount of memory used
580# by the redis-server to store the data, use the INFO client command. The INFO
581# command shows only the memory used to store the redis data, not the extra
582# memory used by the Windows process for its own requirements. Th3 extra amount
583# of memory not reported by the INFO command can be calculated subtracting the
584# Peak Working Set reported by the Windows Task Manager and the used_memory_peak
585# reported by the INFO command.
586#
587# maxmemory <bytes>
588
589# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
590# is reached. You can select among five behaviors:
591#
592# volatile-lru -> Evict using approximated LRU among the keys with an expire set.
593# allkeys-lru -> Evict any key using approximated LRU.
594# volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
595# allkeys-lfu -> Evict any key using approximated LFU.
596# volatile-random -> Remove a random key among the ones with an expire set.
597# allkeys-random -> Remove a random key, any key.
598# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
599# noeviction -> Don't evict anything, just return an error on write operations.
600#
601# LRU means Least Recently Used
602# LFU means Least Frequently Used
603#
604# Both LRU, LFU and volatile-ttl are implemented using approximated
605# randomized algorithms.
606#
607# Note: with any of the above policies, Redis will return an error on write
608# operations, when there are no suitable keys for eviction.
609#
610# At the date of writing these commands are: set setnx setex append
611# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
612# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
613# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
614# getset mset msetnx exec sort
615#
616# The default is:
617#
618# maxmemory-policy noeviction
619
620# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated
621# algorithms (in order to save memory), so you can tune it for speed or
622# accuracy. For default Redis will check five keys and pick the one that was
623# used less recently, you can change the sample size using the following
624# configuration directive.
625#
626# The default of 5 produces good enough results. 10 Approximates very closely
627# true LRU but costs more CPU. 3 is faster but not very accurate.
628#
629# maxmemory-samples 5
630
631# Starting from Redis 5, by default a replica will ignore its maxmemory setting
632# (unless it is promoted to master after a failover or manually). It means
633# that the eviction of keys will be just handled by the master, sending the
634# DEL commands to the replica as keys evict in the master side.
635#
636# This behavior ensures that masters and replicas stay consistent, and is usually
637# what you want, however if your replica is writable, or you want the replica to have
638# a different memory setting, and you are sure all the writes performed to the
639# replica are idempotent, then you may change this default (but be sure to understand
640# what you are doing).
641#
642# Note that since the replica by default does not evict, it may end using more
643# memory than the one set via maxmemory (there are certain buffers that may
644# be larger on the replica, or data structures may sometimes take more memory and so
645# forth). So make sure you monitor your replicas and make sure they have enough
646# memory to never hit a real out-of-memory condition before the master hits
647# the configured maxmemory setting.
648#
649# replica-ignore-maxmemory yes
650
651############################# LAZY FREEING ####################################
652
653# Redis has two primitives to delete keys. One is called DEL and is a blocking
654# deletion of the object. It means that the server stops processing new commands
655# in order to reclaim all the memory associated with an object in a synchronous
656# way. If the key deleted is associated with a small object, the time needed
657# in order to execute the DEL command is very small and comparable to most other
658# O(1) or O(log_N) commands in Redis. However if the key is associated with an
659# aggregated value containing millions of elements, the server can block for
660# a long time (even seconds) in order to complete the operation.
661#
662# For the above reasons Redis also offers non blocking deletion primitives
663# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and
664# FLUSHDB commands, in order to reclaim memory in background. Those commands
665# are executed in constant time. Another thread will incrementally free the
666# object in the background as fast as possible.
667#
668# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled.
669# It's up to the design of the application to understand when it is a good
670# idea to use one or the other. However the Redis server sometimes has to
671# delete keys or flush the whole database as a side effect of other operations.
672# Specifically Redis deletes objects independently of a user call in the
673# following scenarios:
674#
675# 1) On eviction, because of the maxmemory and maxmemory policy configurations,
676# in order to make room for new data, without going over the specified
677# memory limit.
678# 2) Because of expire: when a key with an associated time to live (see the
679# EXPIRE command) must be deleted from memory.
680# 3) Because of a side effect of a command that stores data on a key that may
681# already exist. For example the RENAME command may delete the old key
682# content when it is replaced with another one. Similarly SUNIONSTORE
683# or SORT with STORE option may delete existing keys. The SET command
684# itself removes any old content of the specified key in order to replace
685# it with the specified string.
686# 4) During replication, when a replica performs a full resynchronization with
687# its master, the content of the whole database is removed in order to
688# load the RDB file just transferred.
689#
690# In all the above cases the default is to delete objects in a blocking way,
691# like if DEL was called. However you can configure each case specifically
692# in order to instead release memory in a non-blocking way like if UNLINK
693# was called, using the following configuration directives:
694
695lazyfree-lazy-eviction no
696lazyfree-lazy-expire no
697lazyfree-lazy-server-del no
698replica-lazy-flush no
699
700############################## APPEND ONLY MODE ###############################
701
702# By default Redis asynchronously dumps the dataset on disk. This mode is
703# good enough in many applications, but an issue with the Redis process or
704# a power outage may result into a few minutes of writes lost (depending on
705# the configured save points).
706#
707# The Append Only File is an alternative persistence mode that provides
708# much better durability. For instance using the default data fsync policy
709# (see later in the config file) Redis can lose just one second of writes in a
710# dramatic event like a server power outage, or a single write if something
711# wrong with the Redis process itself happens, but the operating system is
712# still running correctly.
713#
714# AOF and RDB persistence can be enabled at the same time without problems.
715# If the AOF is enabled on startup Redis will load the AOF, that is the file
716# with the better durability guarantees.
717#
718# Please check http://redis.io/topics/persistence for more information.
719
720appendonly no
721
722# The name of the append only file (default: "appendonly.aof")
723
724appendfilename "appendonly.aof"
725
726# The fsync() call tells the Operating System to actually write data on disk
727# instead of waiting for more data in the output buffer. Some OS will really flush
728# data on disk, some other OS will just try to do it ASAP.
729#
730# Redis supports three different modes:
731#
732# no: don't fsync, just let the OS flush the data when it wants. Faster.
733# always: fsync after every write to the append only log. Slow, Safest.
734# everysec: fsync only one time every second. Compromise.
735#
736# The default is "everysec", as that's usually the right compromise between
737# speed and data safety. It's up to you to understand if you can relax this to
738# "no" that will let the operating system flush the output buffer when
739# it wants, for better performances (but if you can live with the idea of
740# some data loss consider the default persistence mode that's snapshotting),
741# or on the contrary, use "always" that's very slow but a bit safer than
742# everysec.
743#
744# More details please check the following article:
745# http://antirez.com/post/redis-persistence-demystified.html
746#
747# If unsure, use "everysec".
748
749# appendfsync always
750appendfsync everysec
751# appendfsync no
752
753# When the AOF fsync policy is set to always or everysec, and a background
754# saving process (a background save or AOF log background rewriting) is
755# performing a lot of I/O against the disk, in some Linux configurations
756# Redis may block too long on the fsync() call. Note that there is no fix for
757# this currently, as even performing fsync in a different thread will block
758# our synchronous write(2) call.
759#
760# In order to mitigate this problem it's possible to use the following option
761# that will prevent fsync() from being called in the main process while a
762# BGSAVE or BGREWRITEAOF is in progress.
763#
764# This means that while another child is saving, the durability of Redis is
765# the same as "appendfsync none". In practical terms, this means that it is
766# possible to lose up to 30 seconds of log in the worst scenario (with the
767# default Linux settings).
768#
769# If you have latency problems turn this to "yes". Otherwise leave it as
770# "no" that is the safest pick from the point of view of durability.
771
772no-appendfsync-on-rewrite no
773
774# Automatic rewrite of the append only file.
775# Redis is able to automatically rewrite the log file implicitly calling
776# BGREWRITEAOF when the AOF log size grows by the specified percentage.
777#
778# This is how it works: Redis remembers the size of the AOF file after the
779# latest rewrite (if no rewrite has happened since the restart, the size of
780# the AOF at startup is used).
781#
782# This base size is compared to the current size. If the current size is
783# bigger than the specified percentage, the rewrite is triggered. Also
784# you need to specify a minimal size for the AOF file to be rewritten, this
785# is useful to avoid rewriting the AOF file even if the percentage increase
786# is reached but it is still pretty small.
787#
788# Specify a percentage of zero in order to disable the automatic AOF
789# rewrite feature.
790
791auto-aof-rewrite-percentage 100
792auto-aof-rewrite-min-size 64mb
793
794# An AOF file may be found to be truncated at the end during the Redis
795# startup process, when the AOF data gets loaded back into memory.
796# This may happen when the system where Redis is running
797# crashes, especially when an ext4 filesystem is mounted without the
798# data=ordered option (however this can't happen when Redis itself
799# crashes or aborts but the operating system still works correctly).
800#
801# Redis can either exit with an error when this happens, or load as much
802# data as possible (the default now) and start if the AOF file is found
803# to be truncated at the end. The following option controls this behavior.
804#
805# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
806# the Redis server starts emitting a log to inform the user of the event.
807# Otherwise if the option is set to no, the server aborts with an error
808# and refuses to start. When the option is set to no, the user requires
809# to fix the AOF file using the "redis-check-aof" utility before to restart
810# the server.
811#
812# Note that if the AOF file will be found to be corrupted in the middle
813# the server will still exit with an error. This option only applies when
814# Redis will try to read more data from the AOF file but not enough bytes
815# will be found.
816aof-load-truncated yes
817
818# When rewriting the AOF file, Redis is able to use an RDB preamble in the
819# AOF file for faster rewrites and recoveries. When this option is turned
820# on the rewritten AOF file is composed of two different stanzas:
821#
822# [RDB file][AOF tail]
823#
824# When loading Redis recognizes that the AOF file starts with the "REDIS"
825# string and loads the prefixed RDB file, and continues loading the AOF
826# tail.
827aof-use-rdb-preamble yes
828
829################################ LUA SCRIPTING ###############################
830
831# Max execution time of a Lua script in milliseconds.
832#
833# If the maximum execution time is reached Redis will log that a script is
834# still in execution after the maximum allowed time and will start to
835# reply to queries with an error.
836#
837# When a long running script exceeds the maximum execution time only the
838# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be
839# used to stop a script that did not yet called write commands. The second
840# is the only way to shut down the server in the case a write command was
841# already issued by the script but the user doesn't want to wait for the natural
842# termination of the script.
843#
844# Set it to 0 or a negative value for unlimited execution without warnings.
845lua-time-limit 5000
846
847################################ REDIS CLUSTER ###############################
848
849# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
850# started as cluster nodes can. In order to start a Redis instance as a
851# cluster node enable the cluster support uncommenting the following:
852#
853# cluster-enabled yes
854
855# Every cluster node has a cluster configuration file. This file is not
856# intended to be edited by hand. It is created and updated by Redis nodes.
857# Every Redis Cluster node requires a different cluster configuration file.
858# Make sure that instances running in the same system do not have
859# overlapping cluster configuration file names.
860#
861# cluster-config-file nodes-6379.conf
862
863# Cluster node timeout is the amount of milliseconds a node must be unreachable
864# for it to be considered in failure state.
865# Most other internal time limits are multiple of the node timeout.
866#
867# cluster-node-timeout 15000
868
869# A replica of a failing master will avoid to start a failover if its data
870# looks too old.
871#
872# There is no simple way for a replica to actually have an exact measure of
873# its "data age", so the following two checks are performed:
874#
875# 1) If there are multiple replicas able to failover, they exchange messages
876# in order to try to give an advantage to the replica with the best
877# replication offset (more data from the master processed).
878# Replicas will try to get their rank by offset, and apply to the start
879# of the failover a delay proportional to their rank.
880#
881# 2) Every single replica computes the time of the last interaction with
882# its master. This can be the last ping or command received (if the master
883# is still in the "connected" state), or the time that elapsed since the
884# disconnection with the master (if the replication link is currently down).
885# If the last interaction is too old, the replica will not try to failover
886# at all.
887#
888# The point "2" can be tuned by user. Specifically a replica will not perform
889# the failover if, since the last interaction with the master, the time
890# elapsed is greater than:
891#
892# (node-timeout * replica-validity-factor) + repl-ping-replica-period
893#
894# So for example if node-timeout is 30 seconds, and the replica-validity-factor
895# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the
896# replica will not try to failover if it was not able to talk with the master
897# for longer than 310 seconds.
898#
899# A large replica-validity-factor may allow replicas with too old data to failover
900# a master, while a too small value may prevent the cluster from being able to
901# elect a replica at all.
902#
903# For maximum availability, it is possible to set the replica-validity-factor
904# to a value of 0, which means, that replicas will always try to failover the
905# master regardless of the last time they interacted with the master.
906# (However they'll always try to apply a delay proportional to their
907# offset rank).
908#
909# Zero is the only value able to guarantee that when all the partitions heal
910# the cluster will always be able to continue.
911#
912# cluster-replica-validity-factor 10
913
914# Cluster replicas are able to migrate to orphaned masters, that are masters
915# that are left without working replicas. This improves the cluster ability
916# to resist to failures as otherwise an orphaned master can't be failed over
917# in case of failure if it has no working replicas.
918#
919# Replicas migrate to orphaned masters only if there are still at least a
920# given number of other working replicas for their old master. This number
921# is the "migration barrier". A migration barrier of 1 means that a replica
922# will migrate only if there is at least 1 other working replica for its master
923# and so forth. It usually reflects the number of replicas you want for every
924# master in your cluster.
925#
926# Default is 1 (replicas migrate only if their masters remain with at least
927# one replica). To disable migration just set it to a very large value.
928# A value of 0 can be set but is useful only for debugging and dangerous
929# in production.
930#
931# cluster-migration-barrier 1
932
933# By default Redis Cluster nodes stop accepting queries if they detect there
934# is at least an hash slot uncovered (no available node is serving it).
935# This way if the cluster is partially down (for example a range of hash slots
936# are no longer covered) all the cluster becomes, eventually, unavailable.
937# It automatically returns available as soon as all the slots are covered again.
938#
939# However sometimes you want the subset of the cluster which is working,
940# to continue to accept queries for the part of the key space that is still
941# covered. In order to do so, just set the cluster-require-full-coverage
942# option to no.
943#
944# cluster-require-full-coverage yes
945
946# This option, when set to yes, prevents replicas from trying to failover its
947# master during master failures. However the master can still perform a
948# manual failover, if forced to do so.
949#
950# This is useful in different scenarios, especially in the case of multiple
951# data center operations, where we want one side to never be promoted if not
952# in the case of a total DC failure.
953#
954# cluster-replica-no-failover no
955
956# In order to setup your cluster make sure to read the documentation
957# available at http://redis.io web site.
958
959########################## CLUSTER DOCKER/NAT support ########################
960
961# In certain deployments, Redis Cluster nodes address discovery fails, because
962# addresses are NAT-ted or because ports are forwarded (the typical case is
963# Docker and other containers).
964#
965# In order to make Redis Cluster working in such environments, a static
966# configuration where each node knows its public address is needed. The
967# following two options are used for this scope, and are:
968#
969# * cluster-announce-ip
970# * cluster-announce-port
971# * cluster-announce-bus-port
972#
973# Each instruct the node about its address, client port, and cluster message
974# bus port. The information is then published in the header of the bus packets
975# so that other nodes will be able to correctly map the address of the node
976# publishing the information.
977#
978# If the above options are not used, the normal Redis Cluster auto-detection
979# will be used instead.
980#
981# Note that when remapped, the bus port may not be at the fixed offset of
982# clients port + 10000, so you can specify any port and bus-port depending
983# on how they get remapped. If the bus-port is not set, a fixed offset of
984# 10000 will be used as usually.
985#
986# Example:
987#
988# cluster-announce-ip 10.1.1.5
989# cluster-announce-port 6379
990# cluster-announce-bus-port 6380
991
992################################## SLOW LOG ###################################
993
994# The Redis Slow Log is a system to log queries that exceeded a specified
995# execution time. The execution time does not include the I/O operations
996# like talking with the client, sending the reply and so forth,
997# but just the time needed to actually execute the command (this is the only
998# stage of command execution where the thread is blocked and can not serve
999# other requests in the meantime).
1000#
1001# You can configure the slow log with two parameters: one tells Redis
1002# what is the execution time, in microseconds, to exceed in order for the
1003# command to get logged, and the other parameter is the length of the
1004# slow log. When a new command is logged the oldest one is removed from the
1005# queue of logged commands.
1006
1007# The following time is expressed in microseconds, so 1000000 is equivalent
1008# to one second. Note that a negative number disables the slow log, while
1009# a value of zero forces the logging of every command.
1010slowlog-log-slower-than 10000
1011
1012# There is no limit to this length. Just be aware that it will consume memory.
1013# You can reclaim memory used by the slow log with SLOWLOG RESET.
1014slowlog-max-len 128
1015
1016################################ LATENCY MONITOR ##############################
1017
1018# The Redis latency monitoring subsystem samples different operations
1019# at runtime in order to collect data related to possible sources of
1020# latency of a Redis instance.
1021#
1022# Via the LATENCY command this information is available to the user that can
1023# print graphs and obtain reports.
1024#
1025# The system only logs operations that were performed in a time equal or
1026# greater than the amount of milliseconds specified via the
1027# latency-monitor-threshold configuration directive. When its value is set
1028# to zero, the latency monitor is turned off.
1029#
1030# By default latency monitoring is disabled since it is mostly not needed
1031# if you don't have latency issues, and collecting data has a performance
1032# impact, that while very small, can be measured under big load. Latency
1033# monitoring can easily be enabled at runtime using the command
1034# "CONFIG SET latency-monitor-threshold <milliseconds>" if needed.
1035latency-monitor-threshold 0
1036
1037############################# EVENT NOTIFICATION ##############################
1038
1039# Redis can notify Pub/Sub clients about events happening in the key space.
1040# This feature is documented at http://redis.io/topics/notifications
1041#
1042# For instance if keyspace events notification is enabled, and a client
1043# performs a DEL operation on key "foo" stored in the Database 0, two
1044# messages will be published via Pub/Sub:
1045#
1046# PUBLISH __keyspace@0__:foo del
1047# PUBLISH __keyevent@0__:del foo
1048#
1049# It is possible to select the events that Redis will notify among a set
1050# of classes. Every class is identified by a single character:
1051#
1052# K Keyspace events, published with __keyspace@<db>__ prefix.
1053# E Keyevent events, published with __keyevent@<db>__ prefix.
1054# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
1055# $ String commands
1056# l List commands
1057# s Set commands
1058# h Hash commands
1059# z Sorted set commands
1060# x Expired events (events generated every time a key expires)
1061# e Evicted events (events generated when a key is evicted for maxmemory)
1062# A Alias for g$lshzxe, so that the "AKE" string means all the events.
1063#
1064# The "notify-keyspace-events" takes as argument a string that is composed
1065# of zero or multiple characters. The empty string means that notifications
1066# are disabled.
1067#
1068# Example: to enable list and generic events, from the point of view of the
1069# event name, use:
1070#
1071# notify-keyspace-events Elg
1072#
1073# Example 2: to get the stream of the expired keys subscribing to channel
1074# name __keyevent@0__:expired use:
1075#
1076# notify-keyspace-events Ex
1077#
1078# By default all notifications are disabled because most users don't need
1079# this feature and the feature has some overhead. Note that if you don't
1080# specify at least one of K or E, no events will be delivered.
1081notify-keyspace-events ""
1082
1083############################### ADVANCED CONFIG ###############################
1084
1085# Hashes are encoded using a memory efficient data structure when they have a
1086# small number of entries, and the biggest entry does not exceed a given
1087# threshold. These thresholds can be configured using the following directives.
1088hash-max-ziplist-entries 512
1089hash-max-ziplist-value 64
1090
1091# Lists are also encoded in a special way to save a lot of space.
1092# The number of entries allowed per internal list node can be specified
1093# as a fixed maximum size or a maximum number of elements.
1094# For a fixed maximum size, use -5 through -1, meaning:
1095# -5: max size: 64 Kb <-- not recommended for normal workloads
1096# -4: max size: 32 Kb <-- not recommended
1097# -3: max size: 16 Kb <-- probably not recommended
1098# -2: max size: 8 Kb <-- good
1099# -1: max size: 4 Kb <-- good
1100# Positive numbers mean store up to _exactly_ that number of elements
1101# per list node.
1102# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size),
1103# but if your use case is unique, adjust the settings as necessary.
1104list-max-ziplist-size -2
1105
1106# Lists may also be compressed.
1107# Compress depth is the number of quicklist ziplist nodes from *each* side of
1108# the list to *exclude* from compression. The head and tail of the list
1109# are always uncompressed for fast push/pop operations. Settings are:
1110# 0: disable all list compression
1111# 1: depth 1 means "don't start compressing until after 1 node into the list,
1112# going from either the head or tail"
1113# So: [head]->node->node->...->node->[tail]
1114# [head], [tail] will always be uncompressed; inner nodes will compress.
1115# 2: [head]->[next]->node->node->...->node->[prev]->[tail]
1116# 2 here means: don't compress head or head->next or tail->prev or tail,
1117# but compress all nodes between them.
1118# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
1119# etc.
1120list-compress-depth 0
1121
1122# Sets have a special encoding in just one case: when a set is composed
1123# of just strings that happen to be integers in radix 10 in the range
1124# of 64 bit signed integers.
1125# The following configuration setting sets the limit in the size of the
1126# set in order to use this special memory saving encoding.
1127set-max-intset-entries 512
1128
1129# Similarly to hashes and lists, sorted sets are also specially encoded in
1130# order to save a lot of space. This encoding is only used when the length and
1131# elements of a sorted set are below the following limits:
1132zset-max-ziplist-entries 128
1133zset-max-ziplist-value 64
1134
1135# HyperLogLog sparse representation bytes limit. The limit includes the
1136# 16 bytes header. When an HyperLogLog using the sparse representation crosses
1137# this limit, it is converted into the dense representation.
1138#
1139# A value greater than 16000 is totally useless, since at that point the
1140# dense representation is more memory efficient.
1141#
1142# The suggested value is ~ 3000 in order to have the benefits of
1143# the space efficient encoding without slowing down too much PFADD,
1144# which is O(N) with the sparse encoding. The value can be raised to
1145# ~ 10000 when CPU is not a concern, but space is, and the data set is
1146# composed of many HyperLogLogs with cardinality in the 0 - 15000 range.
1147hll-sparse-max-bytes 3000
1148
1149# Streams macro node max size / items. The stream data structure is a radix
1150# tree of big nodes that encode multiple items inside. Using this configuration
1151# it is possible to configure how big a single node can be in bytes, and the
1152# maximum number of items it may contain before switching to a new node when
1153# appending new stream entries. If any of the following settings are set to
1154# zero, the limit is ignored, so for instance it is possible to set just a
1155# max entires limit by setting max-bytes to 0 and max-entries to the desired
1156# value.
1157stream-node-max-bytes 4096
1158stream-node-max-entries 100
1159
1160# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
1161# order to help rehashing the main Redis hash table (the one mapping top-level
1162# keys to values). The hash table implementation Redis uses (see dict.c)
1163# performs a lazy rehashing: the more operation you run into a hash table
1164# that is rehashing, the more rehashing "steps" are performed, so if the
1165# server is idle the rehashing is never complete and some more memory is used
1166# by the hash table.
1167#
1168# The default is to use this millisecond 10 times every second in order to
1169# actively rehash the main dictionaries, freeing memory when possible.
1170#
1171# If unsure:
1172# use "activerehashing no" if you have hard latency requirements and it is
1173# not a good thing in your environment that Redis can reply from time to time
1174# to queries with 2 milliseconds delay.
1175#
1176# use "activerehashing yes" if you don't have such hard requirements but
1177# want to free memory asap when possible.
1178activerehashing yes
1179
1180# The client output buffer limits can be used to force disconnection of clients
1181# that are not reading data from the server fast enough for some reason (a
1182# common reason is that a Pub/Sub client can't consume messages as fast as the
1183# publisher can produce them).
1184#
1185# The limit can be set differently for the three different classes of clients:
1186#
1187# normal -> normal clients including MONITOR clients
1188# replica -> replica clients
1189# pubsub -> clients subscribed to at least one pubsub channel or pattern
1190#
1191# The syntax of every client-output-buffer-limit directive is the following:
1192#
1193# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
1194#
1195# A client is immediately disconnected once the hard limit is reached, or if
1196# the soft limit is reached and remains reached for the specified number of
1197# seconds (continuously).
1198# So for instance if the hard limit is 32 megabytes and the soft limit is
1199# 16 megabytes / 10 seconds, the client will get disconnected immediately
1200# if the size of the output buffers reach 32 megabytes, but will also get
1201# disconnected if the client reaches 16 megabytes and continuously overcomes
1202# the limit for 10 seconds.
1203#
1204# By default normal clients are not limited because they don't receive data
1205# without asking (in a push way), but just after a request, so only
1206# asynchronous clients may create a scenario where data is requested faster
1207# than it can read.
1208#
1209# Instead there is a default limit for pubsub and replica clients, since
1210# subscribers and replicas receive data in a push fashion.
1211#
1212# Both the hard or the soft limit can be disabled by setting them to zero.
1213client-output-buffer-limit normal 0 0 0
1214client-output-buffer-limit replica 256mb 64mb 60
1215client-output-buffer-limit pubsub 32mb 8mb 60
1216
1217# Client query buffers accumulate new commands. They are limited to a fixed
1218# amount by default in order to avoid that a protocol desynchronization (for
1219# instance due to a bug in the client) will lead to unbound memory usage in
1220# the query buffer. However you can configure it here if you have very special
1221# needs, such us huge multi/exec requests or alike.
1222#
1223# client-query-buffer-limit 1gb
1224
1225# In the Redis protocol, bulk requests, that are, elements representing single
1226# strings, are normally limited ot 512 mb. However you can change this limit
1227# here.
1228#
1229# proto-max-bulk-len 512mb
1230
1231# Redis calls an internal function to perform many background tasks, like
1232# closing connections of clients in timeout, purging expired keys that are
1233# never requested, and so forth.
1234#
1235# Not all tasks are performed with the same frequency, but Redis checks for
1236# tasks to perform according to the specified "hz" value.
1237#
1238# By default "hz" is set to 10. Raising the value will use more CPU when
1239# Redis is idle, but at the same time will make Redis more responsive when
1240# there are many keys expiring at the same time, and timeouts may be
1241# handled with more precision.
1242#
1243# The range is between 1 and 500, however a value over 100 is usually not
1244# a good idea. Most users should use the default of 10 and raise this up to
1245# 100 only in environments where very low latency is required.
1246hz 10
1247
1248# Normally it is useful to have an HZ value which is proportional to the
1249# number of clients connected. This is useful in order, for instance, to
1250# avoid too many clients are processed for each background task invocation
1251# in order to avoid latency spikes.
1252#
1253# Since the default HZ value by default is conservatively set to 10, Redis
1254# offers, and enables by default, the ability to use an adaptive HZ value
1255# which will temporary raise when there are many connected clients.
1256#
1257# When dynamic HZ is enabled, the actual configured HZ will be used as
1258# as a baseline, but multiples of the configured HZ value will be actually
1259# used as needed once more clients are connected. In this way an idle
1260# instance will use very little CPU time while a busy instance will be
1261# more responsive.
1262dynamic-hz yes
1263
1264# When a child rewrites the AOF file, if the following option is enabled
1265# the file will be fsync-ed every 32 MB of data generated. This is useful
1266# in order to commit the file to the disk more incrementally and avoid
1267# big latency spikes.
1268aof-rewrite-incremental-fsync yes
1269
1270# When redis saves RDB file, if the following option is enabled
1271# the file will be fsync-ed every 32 MB of data generated. This is useful
1272# in order to commit the file to the disk more incrementally and avoid
1273# big latency spikes.
1274rdb-save-incremental-fsync yes
1275
1276# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good
1277# idea to start with the default settings and only change them after investigating
1278# how to improve the performances and how the keys LFU change over time, which
1279# is possible to inspect via the OBJECT FREQ command.
1280#
1281# There are two tunable parameters in the Redis LFU implementation: the
1282# counter logarithm factor and the counter decay time. It is important to
1283# understand what the two parameters mean before changing them.
1284#
1285# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis
1286# uses a probabilistic increment with logarithmic behavior. Given the value
1287# of the old counter, when a key is accessed, the counter is incremented in
1288# this way:
1289#
1290# 1. A random number R between 0 and 1 is extracted.
1291# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1).
1292# 3. The counter is incremented only if R < P.
1293#
1294# The default lfu-log-factor is 10. This is a table of how the frequency
1295# counter changes with a different number of accesses with different
1296# logarithmic factors:
1297#
1298# +--------+------------+------------+------------+------------+------------+
1299# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |
1300# +--------+------------+------------+------------+------------+------------+
1301# | 0 | 104 | 255 | 255 | 255 | 255 |
1302# +--------+------------+------------+------------+------------+------------+
1303# | 1 | 18 | 49 | 255 | 255 | 255 |
1304# +--------+------------+------------+------------+------------+------------+
1305# | 10 | 10 | 18 | 142 | 255 | 255 |
1306# +--------+------------+------------+------------+------------+------------+
1307# | 100 | 8 | 11 | 49 | 143 | 255 |
1308# +--------+------------+------------+------------+------------+------------+
1309#
1310# NOTE: The above table was obtained by running the following commands:
1311#
1312# redis-benchmark -n 1000000 incr foo
1313# redis-cli object freq foo
1314#
1315# NOTE 2: The counter initial value is 5 in order to give new objects a chance
1316# to accumulate hits.
1317#
1318# The counter decay time is the time, in minutes, that must elapse in order
1319# for the key counter to be divided by two (or decremented if it has a value
1320# less <= 10).
1321#
1322# The default value for the lfu-decay-time is 1. A Special value of 0 means to
1323# decay the counter every time it happens to be scanned.
1324#
1325# lfu-log-factor 10
1326# lfu-decay-time 1
1327
1328################################## INCLUDES ###################################
1329
1330# Include one or more other config files here. This is useful if you
1331# have a standard template that goes to all Redis server but also need
1332# to customize a few per-server settings. Include files can include
1333# other files, so use this wisely.
1334#
1335# include /path/to/local.conf
1336# include /path/to/other.conf