├── .gitignore ├── README.md ├── bin ├── osx │ ├── redis-benchmark │ ├── redis-check-aof │ ├── redis-check-dump │ ├── redis-cli │ ├── redis-sentinel │ └── redis-server └── windows │ ├── redis-benchmark.exe │ ├── redis-benchmark.pdb │ ├── redis-check-aof.exe │ ├── redis-check-aof.pdb │ ├── redis-check-dump.exe │ ├── redis-check-dump.pdb │ ├── redis-cli.exe │ ├── redis-cli.pdb │ ├── redis-server.exe │ ├── redis-server.pdb │ └── redis.windows.conf └── sentinel3 ├── linux ├── redis.conf ├── sentinel.conf ├── server-6380 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── server-6381 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── server-6382 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── start-all.sh └── stop-all.sh ├── osx ├── redis.conf ├── sentinel.conf ├── server-6380 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── server-6381 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── server-6382 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.sh │ ├── state │ │ └── dump.rdb │ └── stop.sh ├── start-all.sh └── stop-all.sh ├── windows-password ├── redis.windows.conf ├── server-6380 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.cmd │ ├── state │ │ └── dump.rdb │ └── stop.cmd ├── server-6381 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.cmd │ ├── state │ │ └── dump.rdb │ └── stop.cmd ├── server-6382 │ ├── redis.conf │ ├── sentinel.conf │ ├── start.cmd │ ├── state │ │ └── dump.rdb │ └── stop.cmd ├── start-all.cmd └── stop-all.cmd └── windows ├── redis.windows.conf ├── server-6380 ├── redis.conf ├── sentinel.conf ├── start.cmd ├── state │ └── dump.rdb └── stop.cmd ├── server-6381 ├── redis.conf ├── sentinel.conf ├── start.cmd ├── state │ └── dump.rdb └── stop.cmd ├── server-6382 ├── redis.conf ├── sentinel.conf ├── start.cmd ├── state │ └── dump.rdb └── stop.cmd ├── start-all.cmd └── stop-all.cmd /.gitignore: -------------------------------------------------------------------------------- 1 | sentinel3/windows/Code -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Instant Redis Sentinel Setup 2 | 3 | ![Instant Redis Sentinel Setup](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/instant-sentinel-setup.png) 4 | 5 | This repository contains the necessary configuration and redis binaries to quickly setup the [Basic Sentinel configuration](http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes) on Linux, OSX or Windows servers. The default configuration supports spawning multiple redis processes which can conveniently all be run on a single server using the included start-all/stop-all scripts (ideal for development environments mimicking their production Sentinel environments). 6 | 7 | ## Usage 8 | 9 | To run the included Sentinel configuration, clone this repo on the server you want to run it on: 10 | 11 | git clone https://github.com/ServiceStack/redis-config.git 12 | 13 | Then run the scripts for the target Operating System. This repository includes the [latest stable](http://redis.io/download) pre-built binaries for OSX and [MSOpen Tech's latest builds](https://github.com/ServiceStack/redis-windows#running-microsofts-native-port-of-redis) for Windows port of Redis in the `/bin` folder. Due to Linux binaries being less portable, the Linux bash scripts assumes an existing install of redis is available in your $PATH. 14 | 15 | ### Windows 16 | 17 | Start 1x Master, 2x Slaves and 3x Sentinel redis-servers: 18 | 19 | cd redis-config\sentinel3\windows 20 | start-all.cmd 21 | 22 | Shutdown started instances: 23 | 24 | stop-all.cmd 25 | 26 | ### OSX 27 | 28 | Start 1x Master, 2x Slaves and 3x Sentinel redis-servers: 29 | 30 | cd redis-config\sentinel3\osx 31 | ./start-all.sh 32 | 33 | Shutdown started instances: 34 | 35 | ./stop-all.sh 36 | 37 | ### Linux 38 | 39 | Start 1x Master, 2x Slaves and 3x Sentinel redis-servers: 40 | 41 | cd redis-config\sentinel3\linux 42 | ./start-all.sh 43 | 44 | Shutdown started instances: 45 | 46 | ./stop-all.sh 47 | 48 | The bash scripts for OSX and Linux require execute permission which can be enabled with: 49 | 50 | chmod a=rx start-all.sh 51 | chmod a=rx stop-all.sh 52 | 53 | ### Checking the running instances 54 | 55 | After spawning multiple redis-server instances the `start-all` script will pause for a key press. Wait a few seconds before hitting return until you see **+slave** and **+sentinel** log entries in the Sentinel's console output. These entries show the sentinels successfully auto-detecting and registering the different redis instances. 56 | 57 | Hitting return will ask the first 2 Sentinel servers for info of the current master and slaves. If everything's configured and working correctly it will show info on each server. 58 | 59 | ### Reset to Original Configuration 60 | 61 | To capture the active roles of the different redis instances, redis will rewrite the redis.conf and sentinel.conf files. You can reset it back to the original configuration by discarding all changes in your cloned git repository which git lets us do with: 62 | 63 | $ git reset --hard head 64 | 65 | ## Sentinel Configuration 66 | 67 | The goal of this project is to specify the minimal amount of info required to create a working Sentinel configuration. Anything not specified falls back to use the original **redis.conf** defaults shipped with the latest stable distribution of Redis. 68 | 69 | The configurations are logically split into separate `/server-{port}` directories to match the redis and sentinel instances to run on each server. They use layered config so they're easily customizable and can be started independently with the included per-server start/stop scripts. 70 | 71 | We'll take a close look at how one of the slaves are configured to see how it fits together. For this example we'll walk through the configurations for OSX located at [/sentine3/osx](https://github.com/ServiceStack/redis-config/tree/master/sentinel3/osx): 72 | 73 | ``` 74 | /osx 75 | /server-6380 76 | /server-6381 #Config for Slave node 77 | redis.conf #Config for Slave instance on port 6381 78 | sentinel.conf #Config for Sentinel instance on port 26381 79 | /server-6382 80 | 81 | redis.conf #Default redis.conf shipped in latest Redis Stable 82 | ``` 83 | 84 | From the directory structure above we see there's a separate configuration for the master (6380) and its slaves (6381,6382) instances. We've started from port 6380 so this could also be run along-side an existing redis intance on 6379 if needed. 85 | 86 | #### [/server-6381/redis.conf](https://github.com/ServiceStack/redis-config/blob/master/sentinel3/osx/server-6381/redis.conf): 87 | 88 | The configuration for this slave is contained in `redis.conf` which is just: 89 | 90 | ``` 91 | # Relative to ./sentinel3/osx 92 | include redis.conf 93 | 94 | port 6381 95 | dir ./server-6381/state 96 | slaveof 127.0.0.1 6380 97 | ``` 98 | 99 | The `include` directive lets us easily inherit the default `/redis.conf` allowing us to only provide non-default configuration specific to this slave. In this case it will run on port **6381**, persist any RDB snapshots in **./server-6381/state** directory and run as a replicated slave to the master instance running on **127.0.0.1 6380**: 100 | 101 | #### [/server-6381/sentinel.conf](https://github.com/ServiceStack/redis-config/blob/master/sentinel3/osx/server-6381/sentinel.conf): 102 | 103 | The configuration for the Sentinel indicates it should run on port **26381** and monitor the master at **127.0.0.1 6380** that belongs to the **mymaster** group and requires a quorum of **2** sentinels to reach consensus before any action can be taken: 104 | 105 | ``` 106 | # Relative to ./sentinel3/osx 107 | 108 | port 26381 109 | dir ./server-6381/state 110 | sentinel monitor mymaster 127.0.0.1 6380 2 111 | ``` 112 | 113 | ### Localhost vs Network IP's 114 | 115 | This configuration assumes all redis instances are running locally on **127.0.0.1**. If you're instead running it on a remote server that you want anyone in your network to be able to access, you'll need to either change the IP Address in the `*.conf` to use the servers Network IP or alternatively you can leave the defaults but you'll need to map any loopback IP's to its Network IP in the Redis Client library. 116 | 117 | This can be configured in the C# [ServiceStack.Redis](https://github.com/ServiceStack/ServiceStack.Redis) `RedisSentinel` client using the `IpAddressMap` Dictionary. 118 | 119 | E.g. if the remote servers Network IP is **10.0.0.9**, it can be configured with: 120 | 121 | ```csharp 122 | var sentinel = new RedisSentinel(new[]{ "10.0.0.9:26380" }) { 123 | IpAddressMap = { 124 | {"127.0.0.1", "10.0.0.9"}, 125 | } 126 | }; 127 | container.Register(c => sentinel.Start()); 128 | ``` 129 | 130 | The `IpAddressMap` is used to transparently map any returned local **127.0.0.1** IP Address to the **10.0.0.9** Network IP that any other computer on the same network can connect to. 131 | 132 | The `RedisSentinel` client also just needs to be configured with a single Sentinel IP which it uses to automatically resolve the IP Addresses of the remaining Sentinels. 133 | 134 | ## [3x Sentinels monitoring 1x Master and 2x Slaves](http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes) 135 | 136 | With the efficiency and headroom provided from a single redis-server instance, we expect this minimal Sentinel configuration required to achieve high-availability will be the most popular configuration used for Sentinel, which this repository focuses on. 137 | 138 | From the [redis Sentinel docs](http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes) this setup consists of 1x redis master and 2x redis slaves instances with a Redis Sentinel monitoring each redis instance: 139 | 140 | ``` 141 | +----------+ 142 | | M1:6380 | 143 | | S1:26380 | 144 | +----------+ 145 | | 146 | +----------+ | +----------+ 147 | | R2:6381 |----+----| R3:6382 | 148 | | S2:26381 | | S3:26382 | 149 | +----------+ +----------+ 150 | Configuration: quorum = 2 151 | ``` 152 | 153 | > The above diagram also shows the ports for each of the master, slave and sentinel instances. 154 | 155 | This setup enables a "highly-available" configuration which can survive a single **redis-server** or **redis-sentinel** instance or entire server failing. 156 | 157 | ### Redis Slave Server failing 158 | 159 | If any of the slave servers fail it's business as usual with just one less replicated slave. This would still cause temporary disruption for any read-only clients that were connected to the failed slave. Redis clients [following the recommended client strategy](http://redis.io/topics/sentinel-clients) automatically recovers by asking one of the Sentinels for the next available address to connect to, resuming operations with one of the available instances. 160 | 161 | ### Redis Master Server failing 162 | 163 | It's more disruptive when the master server fails since that's where most of the clients are going to be connected to, who'll only be able to resume until the remaining 2 Sentinels both agree (quorum=2) the master is **objectively down** and begins the process of failing over promoting one of the replicated slaves to master. Since replication to slaves is asynchronous there's a small window for loss of writes to master that weren't replicated in time before it failed. 164 | 165 | There's a greater potential for loss if there's instead a network split, cutting off the master server from the remaining sentinel servers, i.e: 166 | 167 | ``` 168 | +----+ 169 | | M1 | 170 | | S1 | <- C1 (writes will be lost) 171 | +----+ 172 | | 173 | / 174 | / 175 | +------+ | +----+ 176 | | [M2] |----+----| R3 | 177 | | S2 | | S3 | 178 | +------+ +----+ 179 | ``` 180 | 181 | In this case the master continues to process redis commands but won't be able to successfully replicate them to any of its slaves. If the network split was long enough to cause the other 2 Sentinels to presume the master had failed and promoted one of the slaves to master, by the time the master rejoins the network it assumes the role as slave and ends up losing all the writes it processed before the network split. 182 | 183 | This loss can be mitigated by configuring the master to stop accepting writes unless it has successfully replicated to a minimum number of slaves specified in the **min-slaves-to-write** and **min-slaves-max-lag** tolerance options. Consult the [Redis Sentinel docs](http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes) for more info. 184 | 185 | ### Google Cloud - [Click to Deploy Redis](https://cloud.google.com/solutions/redis/click-to-deploy) 186 | 187 | The easiest Cloud Service we've found that can instantly setup a multi node Redis Sentinel Configuration as described above is using Google Cloud's [click to deploy Redis feature](https://cloud.google.com/solutions/redis/click-to-deploy) available from the Google Cloud Console under **Deploy & Manage**: 188 | 189 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-01.png) 190 | 191 | Clicking **Deploy** button will let you configure the type, size and location where you want to deploy the Redis VM's: 192 | 193 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-02.png) 194 | 195 | Clicking **Deploy Redis** with a **3** Cluster node count will deploy 3 Linux VM instances containing: 196 | 197 | - A master (read/write) Redis instance (port 6379) 198 | - Two replicated slaves (read-only) Redis instances with data persistence (port 6379) 199 | - Redis Sentinel running in each instance (port 26379) 200 | 201 | After it's finished deploying you'll see the instance names and External IP's for each of the VM instances: 202 | 203 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-03.png) 204 | 205 | It also includes a handy link to be able SSH directly into any of the instances from a browser. Whilst unnecessary since the deployed configuration is immediately ready for use, it still provides a convenient way to quickly explore the different configurations of each of the VM's. 206 | 207 | After its deployed you can get to a summary of all running VM's under `Compute > Compute Engine > VM instances` which provides a real-time graph monitoring the CPU usage of all the VM's: 208 | 209 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-04.png) 210 | 211 | Clicking on any of the instances lets you drill-down to see more info like the Internal IP of the instance used in its internal network: 212 | 213 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-05.png) 214 | 215 | Another way to access this info is via the great command-line support available in [Google Cloud SDK](https://cloud.google.com/sdk/) which after you've [authenticated and set the project](https://cloud.google.com/sdk/gcloud/#gcloud.auth) you want to target will let you see all running instances with: 216 | 217 | gcloud compute instances list 218 | 219 | Which returns the summary info of all running VM instances in that project, e.g: 220 | 221 | ![](https://raw.githubusercontent.com/ServiceStack/Assets/master/img/redis/sentinel3-gcloud-06.png) 222 | 223 | 224 | ### External vs Internal IP's 225 | 226 | Something to keep in mind are that the Redis Sentinels are configured to monitor and report the redis instances internal IP's. Whilst this is ideal when accessing the redis instances from within the same internal network (e.g. from other deployed VM's), it will be an issue if you're connecting to the External IP from an external network (e.g. from your developer workstation) as the IP's returned from the Sentinels are the Internal IP's. 227 | 228 | One solution would be to configure a virtual network so the Internal Network IP's are routed to the Google Cloud VM's. A less invasive solution would be to instead have those Internal IP's mapped to their equivalent External IP's. 229 | 230 | This is available in the C# [ServiceStack.Redis](https://github.com/ServiceStack/ServiceStack.Redis) Client by specifying an Internal -> External IP mapping when initializing a `RedisSentinel`: 231 | 232 | ```csharp 233 | var sentinel = new RedisSentinel(SentinelHosts, "master") 234 | { 235 | IpAddressMap = 236 | { 237 | {"10.240.9.29", "104.197.142.253"}, 238 | {"10.240.32.159", "104.197.132.102"}, 239 | {"10.240.170.236", "104.197.118.169"}, 240 | } 241 | }; 242 | 243 | container.Register(c => sentinel.Start()); 244 | ``` 245 | 246 | Now when the Connection Manager asks the Sentinel for the IP of an available instance, the returned Internal IP gets transparently mapped to its equivalent External IP which the RedisClient can connect to. 247 | 248 | 249 | -------------------------------------------------------------------------------- /bin/osx/redis-benchmark: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-benchmark -------------------------------------------------------------------------------- /bin/osx/redis-check-aof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-check-aof -------------------------------------------------------------------------------- /bin/osx/redis-check-dump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-check-dump -------------------------------------------------------------------------------- /bin/osx/redis-cli: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-cli -------------------------------------------------------------------------------- /bin/osx/redis-sentinel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-sentinel -------------------------------------------------------------------------------- /bin/osx/redis-server: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/osx/redis-server -------------------------------------------------------------------------------- /bin/windows/redis-benchmark.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-benchmark.exe -------------------------------------------------------------------------------- /bin/windows/redis-benchmark.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-benchmark.pdb -------------------------------------------------------------------------------- /bin/windows/redis-check-aof.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-check-aof.exe -------------------------------------------------------------------------------- /bin/windows/redis-check-aof.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-check-aof.pdb -------------------------------------------------------------------------------- /bin/windows/redis-check-dump.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-check-dump.exe -------------------------------------------------------------------------------- /bin/windows/redis-check-dump.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-check-dump.pdb -------------------------------------------------------------------------------- /bin/windows/redis-cli.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-cli.exe -------------------------------------------------------------------------------- /bin/windows/redis-cli.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-cli.pdb -------------------------------------------------------------------------------- /bin/windows/redis-server.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-server.exe -------------------------------------------------------------------------------- /bin/windows/redis-server.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/bin/windows/redis-server.pdb -------------------------------------------------------------------------------- /bin/windows/redis.windows.conf: -------------------------------------------------------------------------------- 1 | # 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 | ################################ GENERAL ##################################### 34 | 35 | # On Windows, daemonize and pidfile are not supported. 36 | # However, you can run redis as a Windows service, and specify a logfile. 37 | # The logfile will contain the pid. 38 | 39 | # Accept connections on the specified port, default is 6379. 40 | # If port 0 is specified Redis will not listen on a TCP socket. 41 | port 6379 42 | 43 | # TCP listen() backlog. 44 | # 45 | # In high requests-per-second environments you need an high backlog in order 46 | # to avoid slow clients connections issues. Note that the Linux kernel 47 | # will silently truncate it to the value of /proc/sys/net/core/somaxconn so 48 | # make sure to raise both the value of somaxconn and tcp_max_syn_backlog 49 | # in order to get the desired effect. 50 | tcp-backlog 511 51 | 52 | # By default Redis listens for connections from all the network interfaces 53 | # available on the server. It is possible to listen to just one or multiple 54 | # interfaces using the "bind" configuration directive, followed by one or 55 | # more IP addresses. 56 | # 57 | # Examples: 58 | # 59 | # bind 192.168.1.100 10.0.0.1 60 | # bind 127.0.0.1 61 | 62 | 63 | # Specify the path for the Unix socket that will be used to listen for 64 | # incoming connections. There is no default, so Redis will not listen 65 | # on a unix socket when not specified. 66 | # 67 | # unixsocket /tmp/redis.sock 68 | # unixsocketperm 700 69 | 70 | # Close the connection after a client is idle for N seconds (0 to disable) 71 | timeout 0 72 | 73 | # TCP keepalive. 74 | # 75 | # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence 76 | # of communication. This is useful for two reasons: 77 | # 78 | # 1) Detect dead peers. 79 | # 2) Take the connection alive from the point of view of network 80 | # equipment in the middle. 81 | # 82 | # On Linux, the specified value (in seconds) is the period used to send ACKs. 83 | # Note that to close the connection the double of the time is needed. 84 | # On other kernels the period depends on the kernel configuration. 85 | # 86 | # A reasonable value for this option is 60 seconds. 87 | tcp-keepalive 0 88 | 89 | # Specify the server verbosity level. 90 | # This can be one of: 91 | # debug (a lot of information, useful for development/testing) 92 | # verbose (many rarely useful info, but not a mess like the debug level) 93 | # notice (moderately verbose, what you want in production probably) 94 | # warning (only very important / critical messages are logged) 95 | loglevel notice 96 | 97 | # Specify the log file name. Also 'stdout' can be used to force 98 | # Redis to log on the standard output. 99 | logfile "" 100 | 101 | # To enable logging to the Windows EventLog, just set 'syslog-enabled' to 102 | # yes, and optionally update the other syslog parameters to suit your needs. 103 | # If Redis is installed and launched as a Windows Service, this will 104 | # automatically be enabled. 105 | # syslog-enabled no 106 | 107 | # Specify the source name of the events in the Windows Application log. 108 | # syslog-ident redis 109 | 110 | # Set the number of databases. The default database is DB 0, you can select 111 | # a different one on a per-connection basis using SELECT where 112 | # dbid is a number between 0 and 'databases'-1 113 | databases 16 114 | 115 | ################################ SNAPSHOTTING ################################ 116 | # 117 | # Save the DB on disk: 118 | # 119 | # save 120 | # 121 | # Will save the DB if both the given number of seconds and the given 122 | # number of write operations against the DB occurred. 123 | # 124 | # In the example below the behaviour will be to save: 125 | # after 900 sec (15 min) if at least 1 key changed 126 | # after 300 sec (5 min) if at least 10 keys changed 127 | # after 60 sec if at least 10000 keys changed 128 | # 129 | # Note: you can disable saving completely by commenting out all "save" lines. 130 | # 131 | # It is also possible to remove all the previously configured save 132 | # points by adding a save directive with a single empty string argument 133 | # like in the following example: 134 | # 135 | # save "" 136 | 137 | save 900 1 138 | save 300 10 139 | save 60 10000 140 | 141 | # By default Redis will stop accepting writes if RDB snapshots are enabled 142 | # (at least one save point) and the latest background save failed. 143 | # This will make the user aware (in a hard way) that data is not persisting 144 | # on disk properly, otherwise chances are that no one will notice and some 145 | # disaster will happen. 146 | # 147 | # If the background saving process will start working again Redis will 148 | # automatically allow writes again. 149 | # 150 | # However if you have setup your proper monitoring of the Redis server 151 | # and persistence, you may want to disable this feature so that Redis will 152 | # continue to work as usual even if there are problems with disk, 153 | # permissions, and so forth. 154 | stop-writes-on-bgsave-error yes 155 | 156 | # Compress string objects using LZF when dump .rdb databases? 157 | # For default that's set to 'yes' as it's almost always a win. 158 | # If you want to save some CPU in the saving child set it to 'no' but 159 | # the dataset will likely be bigger if you have compressible values or keys. 160 | rdbcompression yes 161 | 162 | # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. 163 | # This makes the format more resistant to corruption but there is a performance 164 | # hit to pay (around 10%) when saving and loading RDB files, so you can disable it 165 | # for maximum performances. 166 | # 167 | # RDB files created with checksum disabled have a checksum of zero that will 168 | # tell the loading code to skip the check. 169 | rdbchecksum yes 170 | 171 | # The filename where to dump the DB 172 | dbfilename dump.rdb 173 | 174 | # The working directory. 175 | # 176 | # The DB will be written inside this directory, with the filename specified 177 | # above using the 'dbfilename' configuration directive. 178 | # 179 | # The Append Only File will also be created inside this directory. 180 | # 181 | # Note that you must specify a directory here, not a file name. 182 | dir ./ 183 | 184 | ################################# REPLICATION ################################# 185 | 186 | # Master-Slave replication. Use slaveof to make a Redis instance a copy of 187 | # another Redis server. A few things to understand ASAP about Redis replication. 188 | # 189 | # 1) Redis replication is asynchronous, but you can configure a master to 190 | # stop accepting writes if it appears to be not connected with at least 191 | # a given number of slaves. 192 | # 2) Redis slaves are able to perform a partial resynchronization with the 193 | # master if the replication link is lost for a relatively small amount of 194 | # time. You may want to configure the replication backlog size (see the next 195 | # sections of this file) with a sensible value depending on your needs. 196 | # 3) Replication is automatic and does not need user intervention. After a 197 | # network partition slaves automatically try to reconnect to masters 198 | # and resynchronize with them. 199 | # 200 | # slaveof 201 | 202 | # If the master is password protected (using the "requirepass" configuration 203 | # directive below) it is possible to tell the slave to authenticate before 204 | # starting the replication synchronization process, otherwise the master will 205 | # refuse the slave request. 206 | # 207 | # masterauth 208 | 209 | # When a slave loses its connection with the master, or when the replication 210 | # is still in progress, the slave can act in two different ways: 211 | # 212 | # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will 213 | # still reply to client requests, possibly with out of date data, or the 214 | # data set may just be empty if this is the first synchronization. 215 | # 216 | # 2) if slave-serve-stale-data is set to 'no' the slave will reply with 217 | # an error "SYNC with master in progress" to all the kind of commands 218 | # but to INFO and SLAVEOF. 219 | # 220 | slave-serve-stale-data yes 221 | 222 | # You can configure a slave instance to accept writes or not. Writing against 223 | # a slave instance may be useful to store some ephemeral data (because data 224 | # written on a slave will be easily deleted after resync with the master) but 225 | # may also cause problems if clients are writing to it because of a 226 | # misconfiguration. 227 | # 228 | # Since Redis 2.6 by default slaves are read-only. 229 | # 230 | # Note: read only slaves are not designed to be exposed to untrusted clients 231 | # on the internet. It's just a protection layer against misuse of the instance. 232 | # Still a read only slave exports by default all the administrative commands 233 | # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve 234 | # security of read only slaves using 'rename-command' to shadow all the 235 | # administrative / dangerous commands. 236 | slave-read-only yes 237 | 238 | # Replication SYNC strategy: disk or socket. 239 | # 240 | # ------------------------------------------------------- 241 | # WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY 242 | # ------------------------------------------------------- 243 | # 244 | # New slaves and reconnecting slaves that are not able to continue the replication 245 | # process just receiving differences, need to do what is called a "full 246 | # synchronization". An RDB file is transmitted from the master to the slaves. 247 | # The transmission can happen in two different ways: 248 | # 249 | # 1) Disk-backed: The Redis master creates a new process that writes the RDB 250 | # file on disk. Later the file is transferred by the parent 251 | # process to the slaves incrementally. 252 | # 2) Diskless: The Redis master creates a new process that directly writes the 253 | # RDB file to slave sockets, without touching the disk at all. 254 | # 255 | # With disk-backed replication, while the RDB file is generated, more slaves 256 | # can be queued and served with the RDB file as soon as the current child producing 257 | # the RDB file finishes its work. With diskless replication instead once 258 | # the transfer starts, new slaves arriving will be queued and a new transfer 259 | # will start when the current one terminates. 260 | # 261 | # When diskless replication is used, the master waits a configurable amount of 262 | # time (in seconds) before starting the transfer in the hope that multiple slaves 263 | # will arrive and the transfer can be parallelized. 264 | # 265 | # With slow disks and fast (large bandwidth) networks, diskless replication 266 | # works better. 267 | repl-diskless-sync no 268 | 269 | # When diskless replication is enabled, it is possible to configure the delay 270 | # the server waits in order to spawn the child that trnasfers the RDB via socket 271 | # to the slaves. 272 | # 273 | # This is important since once the transfer starts, it is not possible to serve 274 | # new slaves arriving, that will be queued for the next RDB transfer, so the server 275 | # waits a delay in order to let more slaves arrive. 276 | # 277 | # The delay is specified in seconds, and by default is 5 seconds. To disable 278 | # it entirely just set it to 0 seconds and the transfer will start ASAP. 279 | repl-diskless-sync-delay 5 280 | 281 | # Slaves send PINGs to server in a predefined interval. It's possible to change 282 | # this interval with the repl_ping_slave_period option. The default value is 10 283 | # seconds. 284 | # 285 | # repl-ping-slave-period 10 286 | 287 | # The following option sets the replication timeout for: 288 | # 289 | # 1) Bulk transfer I/O during SYNC, from the point of view of slave. 290 | # 2) Master timeout from the point of view of slaves (data, pings). 291 | # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). 292 | # 293 | # It is important to make sure that this value is greater than the value 294 | # specified for repl-ping-slave-period otherwise a timeout will be detected 295 | # every time there is low traffic between the master and the slave. 296 | # 297 | # repl-timeout 60 298 | 299 | # Disable TCP_NODELAY on the slave socket after SYNC? 300 | # 301 | # If you select "yes" Redis will use a smaller number of TCP packets and 302 | # less bandwidth to send data to slaves. But this can add a delay for 303 | # the data to appear on the slave side, up to 40 milliseconds with 304 | # Linux kernels using a default configuration. 305 | # 306 | # If you select "no" the delay for data to appear on the slave side will 307 | # be reduced but more bandwidth will be used for replication. 308 | # 309 | # By default we optimize for low latency, but in very high traffic conditions 310 | # or when the master and slaves are many hops away, turning this to "yes" may 311 | # be a good idea. 312 | repl-disable-tcp-nodelay no 313 | 314 | # Set the replication backlog size. The backlog is a buffer that accumulates 315 | # slave data when slaves are disconnected for some time, so that when a slave 316 | # wants to reconnect again, often a full resync is not needed, but a partial 317 | # resync is enough, just passing the portion of data the slave missed while 318 | # disconnected. 319 | # 320 | # The bigger the replication backlog, the longer the time the slave can be 321 | # disconnected and later be able to perform a partial resynchronization. 322 | # 323 | # The backlog is only allocated once there is at least a slave connected. 324 | # 325 | # repl-backlog-size 1mb 326 | 327 | # After a master has no longer connected slaves for some time, the backlog 328 | # will be freed. The following option configures the amount of seconds that 329 | # need to elapse, starting from the time the last slave disconnected, for 330 | # the backlog buffer to be freed. 331 | # 332 | # A value of 0 means to never release the backlog. 333 | # 334 | # repl-backlog-ttl 3600 335 | 336 | # The slave priority is an integer number published by Redis in the INFO output. 337 | # It is used by Redis Sentinel in order to select a slave to promote into a 338 | # master if the master is no longer working correctly. 339 | # 340 | # A slave with a low priority number is considered better for promotion, so 341 | # for instance if there are three slaves with priority 10, 100, 25 Sentinel will 342 | # pick the one with priority 10, that is the lowest. 343 | # 344 | # However a special priority of 0 marks the slave as not able to perform the 345 | # role of master, so a slave with priority of 0 will never be selected by 346 | # Redis Sentinel for promotion. 347 | # 348 | # By default the priority is 100. 349 | slave-priority 100 350 | 351 | # It is possible for a master to stop accepting writes if there are less than 352 | # N slaves connected, having a lag less or equal than M seconds. 353 | # 354 | # The N slaves need to be in "online" state. 355 | # 356 | # The lag in seconds, that must be <= the specified value, is calculated from 357 | # the last ping received from the slave, that is usually sent every second. 358 | # 359 | # This option does not GUARANTEE that N replicas will accept the write, but 360 | # will limit the window of exposure for lost writes in case not enough slaves 361 | # are available, to the specified number of seconds. 362 | # 363 | # For example to require at least 3 slaves with a lag <= 10 seconds use: 364 | # 365 | # min-slaves-to-write 3 366 | # min-slaves-max-lag 10 367 | # 368 | # Setting one or the other to 0 disables the feature. 369 | # 370 | # By default min-slaves-to-write is set to 0 (feature disabled) and 371 | # min-slaves-max-lag is set to 10. 372 | 373 | ################################## SECURITY ################################### 374 | 375 | # Require clients to issue AUTH before processing any other 376 | # commands. This might be useful in environments in which you do not trust 377 | # others with access to the host running redis-server. 378 | # 379 | # This should stay commented out for backward compatibility and because most 380 | # people do not need auth (e.g. they run their own servers). 381 | # 382 | # Warning: since Redis is pretty fast an outside user can try up to 383 | # 150k passwords per second against a good box. This means that you should 384 | # use a very strong password otherwise it will be very easy to break. 385 | # 386 | # requirepass foobared 387 | 388 | # Command renaming. 389 | # 390 | # It is possible to change the name of dangerous commands in a shared 391 | # environment. For instance the CONFIG command may be renamed into something 392 | # hard to guess so that it will still be available for internal-use tools 393 | # but not available for general clients. 394 | # 395 | # Example: 396 | # 397 | # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 398 | # 399 | # It is also possible to completely kill a command by renaming it into 400 | # an empty string: 401 | # 402 | # rename-command CONFIG "" 403 | # 404 | # Please note that changing the name of commands that are logged into the 405 | # AOF file or transmitted to slaves may cause problems. 406 | 407 | ################################### LIMITS #################################### 408 | 409 | # Set the max number of connected clients at the same time. By default 410 | # this limit is set to 10000 clients, however if the Redis server is not 411 | # able to configure the process file limit to allow for the specified limit 412 | # the max number of allowed clients is set to the current file limit 413 | # minus 32 (as Redis reserves a few file descriptors for internal uses). 414 | # 415 | # Once the limit is reached Redis will close all the new connections sending 416 | # an error 'max number of clients reached'. 417 | # 418 | # maxclients 10000 419 | 420 | # If Redis is to be used as an in-memory-only cache without any kind of 421 | # persistence, then the fork() mechanism used by the background AOF/RDB 422 | # persistence is unnecessary. As an optimization, all persistence can be 423 | # turned off in the Windows version of Redis. This will redirect heap 424 | # allocations to the system heap allocator, and disable commands that would 425 | # otherwise cause fork() operations: BGSAVE and BGREWRITEAOF. 426 | # This flag may not be combined with any of the other flags that configure 427 | # AOF and RDB operations. 428 | # persistence-available [(yes)|no] 429 | 430 | # Don't use more memory than the specified amount of bytes. 431 | # When the memory limit is reached Redis will try to remove keys 432 | # according to the eviction policy selected (see maxmemory-policy). 433 | # 434 | # If Redis can't remove keys according to the policy, or if the policy is 435 | # set to 'noeviction', Redis will start to reply with errors to commands 436 | # that would use more memory, like SET, LPUSH, and so on, and will continue 437 | # to reply to read-only commands like GET. 438 | # 439 | # This option is usually useful when using Redis as an LRU cache, or to set 440 | # a hard memory limit for an instance (using the 'noeviction' policy). 441 | # 442 | # WARNING: If you have slaves attached to an instance with maxmemory on, 443 | # the size of the output buffers needed to feed the slaves are subtracted 444 | # from the used memory count, so that network problems / resyncs will 445 | # not trigger a loop where keys are evicted, and in turn the output 446 | # buffer of slaves is full with DELs of keys evicted triggering the deletion 447 | # of more keys, and so forth until the database is completely emptied. 448 | # 449 | # In short... if you have slaves attached it is suggested that you set a lower 450 | # limit for maxmemory so that there is some free RAM on the system for slave 451 | # output buffers (but this is not needed if the policy is 'noeviction'). 452 | # 453 | # WARNING: not setting maxmemory will cause Redis to terminate with an 454 | # out-of-memory exception if the heap limit is reached. 455 | # 456 | # NOTE: since Redis uses the system paging file to allocate the heap memory, 457 | # the Working Set memory usage showed by the Windows Task Manager or by other 458 | # tools such as ProcessExplorer will not always be accurate. For example, right 459 | # after a background save of the RDB or the AOF files, the working set value 460 | # may drop significantly. In order to check the correct amount of memory used 461 | # by the redis-server to store the data, use the INFO client command. The INFO 462 | # command shows only the memory used to store the redis data, not the extra 463 | # memory used by the Windows process for its own requirements. Th3 extra amount 464 | # of memory not reported by the INFO command can be calculated subtracting the 465 | # Peak Working Set reported by the Windows Task Manager and the used_memory_peak 466 | # reported by the INFO command. 467 | # 468 | # maxmemory 469 | 470 | # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory 471 | # is reached. You can select among five behaviors: 472 | # 473 | # volatile-lru -> remove the key with an expire set using an LRU algorithm 474 | # allkeys-lru -> remove any key according to the LRU algorithm 475 | # volatile-random -> remove a random key with an expire set 476 | # allkeys-random -> remove a random key, any key 477 | # volatile-ttl -> remove the key with the nearest expire time (minor TTL) 478 | # noeviction -> don't expire at all, just return an error on write operations 479 | # 480 | # Note: with any of the above policies, Redis will return an error on write 481 | # operations, when there are no suitable keys for eviction. 482 | # 483 | # At the date of writing these commands are: set setnx setex append 484 | # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd 485 | # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby 486 | # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby 487 | # getset mset msetnx exec sort 488 | # 489 | # The default is: 490 | # 491 | # maxmemory-policy volatile-lru 492 | 493 | # LRU and minimal TTL algorithms are not precise algorithms but approximated 494 | # algorithms (in order to save memory), so you can select as well the sample 495 | # size to check. For instance for default Redis will check three keys and 496 | # pick the one that was used less recently, you can change the sample size 497 | # using the following configuration directive. 498 | # 499 | # maxmemory-samples 3 500 | 501 | ############################## APPEND ONLY MODE ############################### 502 | 503 | # By default Redis asynchronously dumps the dataset on disk. This mode is 504 | # good enough in many applications, but an issue with the Redis process or 505 | # a power outage may result into a few minutes of writes lost (depending on 506 | # the configured save points). 507 | # 508 | # The Append Only File is an alternative persistence mode that provides 509 | # much better durability. For instance using the default data fsync policy 510 | # (see later in the config file) Redis can lose just one second of writes in a 511 | # dramatic event like a server power outage, or a single write if something 512 | # wrong with the Redis process itself happens, but the operating system is 513 | # still running correctly. 514 | # 515 | # AOF and RDB persistence can be enabled at the same time without problems. 516 | # If the AOF is enabled on startup Redis will load the AOF, that is the file 517 | # with the better durability guarantees. 518 | # 519 | # Please check http://redis.io/topics/persistence for more information. 520 | 521 | appendonly no 522 | 523 | # The name of the append only file (default: "appendonly.aof") 524 | appendfilename "appendonly.aof" 525 | 526 | # The fsync() call tells the Operating System to actually write data on disk 527 | # instead of waiting for more data in the output buffer. Some OS will really flush 528 | # data on disk, some other OS will just try to do it ASAP. 529 | # 530 | # Redis supports three different modes: 531 | # 532 | # no: don't fsync, just let the OS flush the data when it wants. Faster. 533 | # always: fsync after every write to the append only log . Slow, Safest. 534 | # everysec: fsync only one time every second. Compromise. 535 | # 536 | # The default is "everysec", as that's usually the right compromise between 537 | # speed and data safety. It's up to you to understand if you can relax this to 538 | # "no" that will let the operating system flush the output buffer when 539 | # it wants, for better performances (but if you can live with the idea of 540 | # some data loss consider the default persistence mode that's snapshotting), 541 | # or on the contrary, use "always" that's very slow but a bit safer than 542 | # everysec. 543 | # 544 | # More details please check the following article: 545 | # http://antirez.com/post/redis-persistence-demystified.html 546 | # 547 | # If unsure, use "everysec". 548 | 549 | # appendfsync always 550 | appendfsync everysec 551 | # appendfsync no 552 | 553 | # When the AOF fsync policy is set to always or everysec, and a background 554 | # saving process (a background save or AOF log background rewriting) is 555 | # performing a lot of I/O against the disk, in some Linux configurations 556 | # Redis may block too long on the fsync() call. Note that there is no fix for 557 | # this currently, as even performing fsync in a different thread will block 558 | # our synchronous write(2) call. 559 | # 560 | # In order to mitigate this problem it's possible to use the following option 561 | # that will prevent fsync() from being called in the main process while a 562 | # BGSAVE or BGREWRITEAOF is in progress. 563 | # 564 | # This means that while another child is saving, the durability of Redis is 565 | # the same as "appendfsync none". In practical terms, this means that it is 566 | # possible to lose up to 30 seconds of log in the worst scenario (with the 567 | # default Linux settings). 568 | # 569 | # If you have latency problems turn this to "yes". Otherwise leave it as 570 | # "no" that is the safest pick from the point of view of durability. 571 | no-appendfsync-on-rewrite no 572 | 573 | # Automatic rewrite of the append only file. 574 | # Redis is able to automatically rewrite the log file implicitly calling 575 | # BGREWRITEAOF when the AOF log size grows by the specified percentage. 576 | # 577 | # This is how it works: Redis remembers the size of the AOF file after the 578 | # latest rewrite (if no rewrite has happened since the restart, the size of 579 | # the AOF at startup is used). 580 | # 581 | # This base size is compared to the current size. If the current size is 582 | # bigger than the specified percentage, the rewrite is triggered. Also 583 | # you need to specify a minimal size for the AOF file to be rewritten, this 584 | # is useful to avoid rewriting the AOF file even if the percentage increase 585 | # is reached but it is still pretty small. 586 | # 587 | # Specify a percentage of zero in order to disable the automatic AOF 588 | # rewrite feature. 589 | 590 | auto-aof-rewrite-percentage 100 591 | auto-aof-rewrite-min-size 64mb 592 | 593 | # An AOF file may be found to be truncated at the end during the Redis 594 | # startup process, when the AOF data gets loaded back into memory. 595 | # This may happen when the system where Redis is running 596 | # crashes, especially when an ext4 filesystem is mounted without the 597 | # data=ordered option (however this can't happen when Redis itself 598 | # crashes or aborts but the operating system still works correctly). 599 | # 600 | # Redis can either exit with an error when this happens, or load as much 601 | # data as possible (the default now) and start if the AOF file is found 602 | # to be truncated at the end. The following option controls this behavior. 603 | # 604 | # If aof-load-truncated is set to yes, a truncated AOF file is loaded and 605 | # the Redis server starts emitting a log to inform the user of the event. 606 | # Otherwise if the option is set to no, the server aborts with an error 607 | # and refuses to start. When the option is set to no, the user requires 608 | # to fix the AOF file using the "redis-check-aof" utility before to restart 609 | # the server. 610 | # 611 | # Note that if the AOF file will be found to be corrupted in the middle 612 | # the server will still exit with an error. This option only applies when 613 | # Redis will try to read more data from the AOF file but not enough bytes 614 | # will be found. 615 | aof-load-truncated yes 616 | 617 | ################################ LUA SCRIPTING ############################### 618 | 619 | # Max execution time of a Lua script in milliseconds. 620 | # 621 | # If the maximum execution time is reached Redis will log that a script is 622 | # still in execution after the maximum allowed time and will start to 623 | # reply to queries with an error. 624 | # 625 | # When a long running script exceeds the maximum execution time only the 626 | # SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be 627 | # used to stop a script that did not yet called write commands. The second 628 | # is the only way to shut down the server in the case a write command was 629 | # already issued by the script but the user doesn't want to wait for the natural 630 | # termination of the script. 631 | # 632 | # Set it to 0 or a negative value for unlimited execution without warnings. 633 | lua-time-limit 5000 634 | 635 | ################################ REDIS CLUSTER ############################### 636 | # 637 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 638 | # WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however 639 | # in order to mark it as "mature" we need to wait for a non trivial percentage 640 | # of users to deploy it in production. 641 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 642 | # 643 | # Normal Redis instances can't be part of a Redis Cluster; only nodes that are 644 | # started as cluster nodes can. In order to start a Redis instance as a 645 | # cluster node enable the cluster support uncommenting the following: 646 | # 647 | # cluster-enabled yes 648 | 649 | # Every cluster node has a cluster configuration file. This file is not 650 | # intended to be edited by hand. It is created and updated by Redis nodes. 651 | # Every Redis Cluster node requires a different cluster configuration file. 652 | # Make sure that instances running in the same system do not have 653 | # overlapping cluster configuration file names. 654 | # 655 | # cluster-config-file nodes-6379.conf 656 | 657 | # Cluster node timeout is the amount of milliseconds a node must be unreachable 658 | # for it to be considered in failure state. 659 | # Most other internal time limits are multiple of the node timeout. 660 | # 661 | # cluster-node-timeout 15000 662 | 663 | # A slave of a failing master will avoid to start a failover if its data 664 | # looks too old. 665 | # 666 | # There is no simple way for a slave to actually have a exact measure of 667 | # its "data age", so the following two checks are performed: 668 | # 669 | # 1) If there are multiple slaves able to failover, they exchange messages 670 | # in order to try to give an advantage to the slave with the best 671 | # replication offset (more data from the master processed). 672 | # Slaves will try to get their rank by offset, and apply to the start 673 | # of the failover a delay proportional to their rank. 674 | # 675 | # 2) Every single slave computes the time of the last interaction with 676 | # its master. This can be the last ping or command received (if the master 677 | # is still in the "connected" state), or the time that elapsed since the 678 | # disconnection with the master (if the replication link is currently down). 679 | # If the last interaction is too old, the slave will not try to failover 680 | # at all. 681 | # 682 | # The point "2" can be tuned by user. Specifically a slave will not perform 683 | # the failover if, since the last interaction with the master, the time 684 | # elapsed is greater than: 685 | # 686 | # (node-timeout * slave-validity-factor) + repl-ping-slave-period 687 | # 688 | # So for example if node-timeout is 30 seconds, and the slave-validity-factor 689 | # is 10, and assuming a default repl-ping-slave-period of 10 seconds, the 690 | # slave will not try to failover if it was not able to talk with the master 691 | # for longer than 310 seconds. 692 | # 693 | # A large slave-validity-factor may allow slaves with too old data to failover 694 | # a master, while a too small value may prevent the cluster from being able to 695 | # elect a slave at all. 696 | # 697 | # For maximum availability, it is possible to set the slave-validity-factor 698 | # to a value of 0, which means, that slaves will always try to failover the 699 | # master regardless of the last time they interacted with the master. 700 | # (However they'll always try to apply a delay proportional to their 701 | # offset rank). 702 | # 703 | # Zero is the only value able to guarantee that when all the partitions heal 704 | # the cluster will always be able to continue. 705 | # 706 | # cluster-slave-validity-factor 10 707 | 708 | # Cluster slaves are able to migrate to orphaned masters, that are masters 709 | # that are left without working slaves. This improves the cluster ability 710 | # to resist to failures as otherwise an orphaned master can't be failed over 711 | # in case of failure if it has no working slaves. 712 | # 713 | # Slaves migrate to orphaned masters only if there are still at least a 714 | # given number of other working slaves for their old master. This number 715 | # is the "migration barrier". A migration barrier of 1 means that a slave 716 | # will migrate only if there is at least 1 other working slave for its master 717 | # and so forth. It usually reflects the number of slaves you want for every 718 | # master in your cluster. 719 | # 720 | # Default is 1 (slaves migrate only if their masters remain with at least 721 | # one slave). To disable migration just set it to a very large value. 722 | # A value of 0 can be set but is useful only for debugging and dangerous 723 | # in production. 724 | # 725 | # cluster-migration-barrier 1 726 | 727 | # By default Redis Cluster nodes stop accepting queries if they detect there 728 | # is at least an hash slot uncovered (no available node is serving it). 729 | # This way if the cluster is partially down (for example a range of hash slots 730 | # are no longer covered) all the cluster becomes, eventually, unavailable. 731 | # It automatically returns available as soon as all the slots are covered again. 732 | # 733 | # However sometimes you want the subset of the cluster which is working, 734 | # to continue to accept queries for the part of the key space that is still 735 | # covered. In order to do so, just set the cluster-require-full-coverage 736 | # option to no. 737 | # 738 | # cluster-require-full-coverage yes 739 | 740 | # In order to setup your cluster make sure to read the documentation 741 | # available at http://redis.io web site. 742 | 743 | ################################## SLOW LOG ################################### 744 | 745 | # The Redis Slow Log is a system to log queries that exceeded a specified 746 | # execution time. The execution time does not include the I/O operations 747 | # like talking with the client, sending the reply and so forth, 748 | # but just the time needed to actually execute the command (this is the only 749 | # stage of command execution where the thread is blocked and can not serve 750 | # other requests in the meantime). 751 | # 752 | # You can configure the slow log with two parameters: one tells Redis 753 | # what is the execution time, in microseconds, to exceed in order for the 754 | # command to get logged, and the other parameter is the length of the 755 | # slow log. When a new command is logged the oldest one is removed from the 756 | # queue of logged commands. 757 | 758 | # The following time is expressed in microseconds, so 1000000 is equivalent 759 | # to one second. Note that a negative number disables the slow log, while 760 | # a value of zero forces the logging of every command. 761 | slowlog-log-slower-than 10000 762 | 763 | # There is no limit to this length. Just be aware that it will consume memory. 764 | # You can reclaim memory used by the slow log with SLOWLOG RESET. 765 | slowlog-max-len 128 766 | 767 | ################################ LATENCY MONITOR ############################## 768 | 769 | # The Redis latency monitoring subsystem samples different operations 770 | # at runtime in order to collect data related to possible sources of 771 | # latency of a Redis instance. 772 | # 773 | # Via the LATENCY command this information is available to the user that can 774 | # print graphs and obtain reports. 775 | # 776 | # The system only logs operations that were performed in a time equal or 777 | # greater than the amount of milliseconds specified via the 778 | # latency-monitor-threshold configuration directive. When its value is set 779 | # to zero, the latency monitor is turned off. 780 | # 781 | # By default latency monitoring is disabled since it is mostly not needed 782 | # if you don't have latency issues, and collecting data has a performance 783 | # impact, that while very small, can be measured under big load. Latency 784 | # monitoring can easily be enalbed at runtime using the command 785 | # "CONFIG SET latency-monitor-threshold " if needed. 786 | latency-monitor-threshold 0 787 | 788 | ############################# Event notification ############################## 789 | 790 | # Redis can notify Pub/Sub clients about events happening in the key space. 791 | # This feature is documented at http://redis.io/topics/notifications 792 | # 793 | # For instance if keyspace events notification is enabled, and a client 794 | # performs a DEL operation on key "foo" stored in the Database 0, two 795 | # messages will be published via Pub/Sub: 796 | # 797 | # PUBLISH __keyspace@0__:foo del 798 | # PUBLISH __keyevent@0__:del foo 799 | # 800 | # It is possible to select the events that Redis will notify among a set 801 | # of classes. Every class is identified by a single character: 802 | # 803 | # K Keyspace events, published with __keyspace@__ prefix. 804 | # E Keyevent events, published with __keyevent@__ prefix. 805 | # g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... 806 | # $ String commands 807 | # l List commands 808 | # s Set commands 809 | # h Hash commands 810 | # z Sorted set commands 811 | # x Expired events (events generated every time a key expires) 812 | # e Evicted events (events generated when a key is evicted for maxmemory) 813 | # A Alias for g$lshzxe, so that the "AKE" string means all the events. 814 | # 815 | # The "notify-keyspace-events" takes as argument a string that is composed 816 | # of zero or multiple characters. The empty string means that notifications 817 | # are disabled. 818 | # 819 | # Example: to enable list and generic events, from the point of view of the 820 | # event name, use: 821 | # 822 | # notify-keyspace-events Elg 823 | # 824 | # Example 2: to get the stream of the expired keys subscribing to channel 825 | # name __keyevent@0__:expired use: 826 | # 827 | # notify-keyspace-events Ex 828 | # 829 | # By default all notifications are disabled because most users don't need 830 | # this feature and the feature has some overhead. Note that if you don't 831 | # specify at least one of K or E, no events will be delivered. 832 | notify-keyspace-events "" 833 | 834 | ############################### ADVANCED CONFIG ############################### 835 | 836 | # Hashes are encoded using a memory efficient data structure when they have a 837 | # small number of entries, and the biggest entry does not exceed a given 838 | # threshold. These thresholds can be configured using the following directives. 839 | hash-max-ziplist-entries 512 840 | hash-max-ziplist-value 64 841 | 842 | # Similarly to hashes, small lists are also encoded in a special way in order 843 | # to save a lot of space. The special representation is only used when 844 | # you are under the following limits: 845 | list-max-ziplist-entries 512 846 | list-max-ziplist-value 64 847 | 848 | # Sets have a special encoding in just one case: when a set is composed 849 | # of just strings that happen to be integers in radix 10 in the range 850 | # of 64 bit signed integers. 851 | # The following configuration setting sets the limit in the size of the 852 | # set in order to use this special memory saving encoding. 853 | set-max-intset-entries 512 854 | 855 | # Similarly to hashes and lists, sorted sets are also specially encoded in 856 | # order to save a lot of space. This encoding is only used when the length and 857 | # elements of a sorted set are below the following limits: 858 | zset-max-ziplist-entries 128 859 | zset-max-ziplist-value 64 860 | 861 | # HyperLogLog sparse representation bytes limit. The limit includes the 862 | # 16 bytes header. When an HyperLogLog using the sparse representation crosses 863 | # this limit, it is converted into the dense representation. 864 | # 865 | # A value greater than 16000 is totally useless, since at that point the 866 | # dense representation is more memory efficient. 867 | # 868 | # The suggested value is ~ 3000 in order to have the benefits of 869 | # the space efficient encoding without slowing down too much PFADD, 870 | # which is O(N) with the sparse encoding. The value can be raised to 871 | # ~ 10000 when CPU is not a concern, but space is, and the data set is 872 | # composed of many HyperLogLogs with cardinality in the 0 - 15000 range. 873 | hll-sparse-max-bytes 3000 874 | 875 | # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in 876 | # order to help rehashing the main Redis hash table (the one mapping top-level 877 | # keys to values). The hash table implementation Redis uses (see dict.c) 878 | # performs a lazy rehashing: the more operation you run into a hash table 879 | # that is rehashing, the more rehashing "steps" are performed, so if the 880 | # server is idle the rehashing is never complete and some more memory is used 881 | # by the hash table. 882 | # 883 | # The default is to use this millisecond 10 times every second in order to 884 | # actively rehash the main dictionaries, freeing memory when possible. 885 | # 886 | # If unsure: 887 | # use "activerehashing no" if you have hard latency requirements and it is 888 | # not a good thing in your environment that Redis can reply from time to time 889 | # to queries with 2 milliseconds delay. 890 | # 891 | # use "activerehashing yes" if you don't have such hard requirements but 892 | # want to free memory asap when possible. 893 | activerehashing yes 894 | 895 | # The client output buffer limits can be used to force disconnection of clients 896 | # that are not reading data from the server fast enough for some reason (a 897 | # common reason is that a Pub/Sub client can't consume messages as fast as the 898 | # publisher can produce them). 899 | # 900 | # The limit can be set differently for the three different classes of clients: 901 | # 902 | # normal -> normal clients including MONITOR clients 903 | # slave -> slave clients 904 | # pubsub -> clients subscribed to at least one pubsub channel or pattern 905 | # 906 | # The syntax of every client-output-buffer-limit directive is the following: 907 | # 908 | # client-output-buffer-limit 909 | # 910 | # A client is immediately disconnected once the hard limit is reached, or if 911 | # the soft limit is reached and remains reached for the specified number of 912 | # seconds (continuously). 913 | # So for instance if the hard limit is 32 megabytes and the soft limit is 914 | # 16 megabytes / 10 seconds, the client will get disconnected immediately 915 | # if the size of the output buffers reach 32 megabytes, but will also get 916 | # disconnected if the client reaches 16 megabytes and continuously overcomes 917 | # the limit for 10 seconds. 918 | # 919 | # By default normal clients are not limited because they don't receive data 920 | # without asking (in a push way), but just after a request, so only 921 | # asynchronous clients may create a scenario where data is requested faster 922 | # than it can read. 923 | # 924 | # Instead there is a default limit for pubsub and slave clients, since 925 | # subscribers and slaves receive data in a push fashion. 926 | # 927 | # Both the hard or the soft limit can be disabled by setting them to zero. 928 | client-output-buffer-limit normal 0 0 0 929 | client-output-buffer-limit slave 256mb 64mb 60 930 | client-output-buffer-limit pubsub 32mb 8mb 60 931 | 932 | # Redis calls an internal function to perform many background tasks, like 933 | # closing connections of clients in timeot, purging expired keys that are 934 | # never requested, and so forth. 935 | # 936 | # Not all tasks are perforemd with the same frequency, but Redis checks for 937 | # tasks to perform according to the specified "hz" value. 938 | # 939 | # By default "hz" is set to 10. Raising the value will use more CPU when 940 | # Redis is idle, but at the same time will make Redis more responsive when 941 | # there are many keys expiring at the same time, and timeouts may be 942 | # handled with more precision. 943 | # 944 | # The range is between 1 and 500, however a value over 100 is usually not 945 | # a good idea. Most users should use the default of 10 and raise this up to 946 | # 100 only in environments where very low latency is required. 947 | hz 10 948 | 949 | # When a child rewrites the AOF file, if the following option is enabled 950 | # the file will be fsync-ed every 32 MB of data generated. This is useful 951 | # in order to commit the file to the disk more incrementally and avoid 952 | # big latency spikes. 953 | aof-rewrite-incremental-fsync yes 954 | 955 | ################################## INCLUDES ################################### 956 | 957 | # Include one or more other config files here. This is useful if you 958 | # have a standard template that goes to all Redis server but also need 959 | # to customize a few per-server settings. Include files can include 960 | # other files, so use this wisely. 961 | # 962 | # include /path/to/local.conf 963 | # include /path/to/other.conf 964 | -------------------------------------------------------------------------------- /sentinel3/linux/redis.conf: -------------------------------------------------------------------------------- 1 | # 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 /path/to/other.conf 32 | 33 | ################################ GENERAL ##################################### 34 | 35 | # By default Redis does not run as a daemon. Use 'yes' if you need it. 36 | # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 37 | daemonize no 38 | 39 | # When running daemonized, Redis writes a pid file in /var/run/redis.pid by 40 | # default. You can specify a custom pid file location here. 41 | pidfile /var/run/redis.pid 42 | 43 | # Accept connections on the specified port, default is 6379. 44 | # If port 0 is specified Redis will not listen on a TCP socket. 45 | port 6379 46 | 47 | # TCP listen() backlog. 48 | # 49 | # In high requests-per-second environments you need an high backlog in order 50 | # to avoid slow clients connections issues. Note that the Linux kernel 51 | # will silently truncate it to the value of /proc/sys/net/core/somaxconn so 52 | # make sure to raise both the value of somaxconn and tcp_max_syn_backlog 53 | # in order to get the desired effect. 54 | tcp-backlog 511 55 | 56 | # By default Redis listens for connections from all the network interfaces 57 | # available on the server. It is possible to listen to just one or multiple 58 | # interfaces using the "bind" configuration directive, followed by one or 59 | # more IP addresses. 60 | # 61 | # Examples: 62 | # 63 | # bind 192.168.1.100 10.0.0.1 64 | # bind 127.0.0.1 65 | 66 | # Specify the path for the Unix socket that will be used to listen for 67 | # incoming connections. There is no default, so Redis will not listen 68 | # on a unix socket when not specified. 69 | # 70 | # unixsocket /tmp/redis.sock 71 | # unixsocketperm 700 72 | 73 | # Close the connection after a client is idle for N seconds (0 to disable) 74 | timeout 0 75 | 76 | # TCP keepalive. 77 | # 78 | # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence 79 | # of communication. This is useful for two reasons: 80 | # 81 | # 1) Detect dead peers. 82 | # 2) Take the connection alive from the point of view of network 83 | # equipment in the middle. 84 | # 85 | # On Linux, the specified value (in seconds) is the period used to send ACKs. 86 | # Note that to close the connection the double of the time is needed. 87 | # On other kernels the period depends on the kernel configuration. 88 | # 89 | # A reasonable value for this option is 60 seconds. 90 | tcp-keepalive 0 91 | 92 | # Specify the server verbosity level. 93 | # This can be one of: 94 | # debug (a lot of information, useful for development/testing) 95 | # verbose (many rarely useful info, but not a mess like the debug level) 96 | # notice (moderately verbose, what you want in production probably) 97 | # warning (only very important / critical messages are logged) 98 | loglevel notice 99 | 100 | # Specify the log file name. Also the empty string can be used to force 101 | # Redis to log on the standard output. Note that if you use standard 102 | # output for logging but daemonize, logs will be sent to /dev/null 103 | logfile "" 104 | 105 | # To enable logging to the system logger, just set 'syslog-enabled' to yes, 106 | # and optionally update the other syslog parameters to suit your needs. 107 | # syslog-enabled no 108 | 109 | # Specify the syslog identity. 110 | # syslog-ident redis 111 | 112 | # Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. 113 | # syslog-facility local0 114 | 115 | # Set the number of databases. The default database is DB 0, you can select 116 | # a different one on a per-connection basis using SELECT where 117 | # dbid is a number between 0 and 'databases'-1 118 | databases 16 119 | 120 | ################################ SNAPSHOTTING ################################ 121 | # 122 | # Save the DB on disk: 123 | # 124 | # save 125 | # 126 | # Will save the DB if both the given number of seconds and the given 127 | # number of write operations against the DB occurred. 128 | # 129 | # In the example below the behaviour will be to save: 130 | # after 900 sec (15 min) if at least 1 key changed 131 | # after 300 sec (5 min) if at least 10 keys changed 132 | # after 60 sec if at least 10000 keys changed 133 | # 134 | # Note: you can disable saving completely by commenting out all "save" lines. 135 | # 136 | # It is also possible to remove all the previously configured save 137 | # points by adding a save directive with a single empty string argument 138 | # like in the following example: 139 | # 140 | # save "" 141 | 142 | save 900 1 143 | save 300 10 144 | save 60 10000 145 | 146 | # By default Redis will stop accepting writes if RDB snapshots are enabled 147 | # (at least one save point) and the latest background save failed. 148 | # This will make the user aware (in a hard way) that data is not persisting 149 | # on disk properly, otherwise chances are that no one will notice and some 150 | # disaster will happen. 151 | # 152 | # If the background saving process will start working again Redis will 153 | # automatically allow writes again. 154 | # 155 | # However if you have setup your proper monitoring of the Redis server 156 | # and persistence, you may want to disable this feature so that Redis will 157 | # continue to work as usual even if there are problems with disk, 158 | # permissions, and so forth. 159 | stop-writes-on-bgsave-error yes 160 | 161 | # Compress string objects using LZF when dump .rdb databases? 162 | # For default that's set to 'yes' as it's almost always a win. 163 | # If you want to save some CPU in the saving child set it to 'no' but 164 | # the dataset will likely be bigger if you have compressible values or keys. 165 | rdbcompression yes 166 | 167 | # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. 168 | # This makes the format more resistant to corruption but there is a performance 169 | # hit to pay (around 10%) when saving and loading RDB files, so you can disable it 170 | # for maximum performances. 171 | # 172 | # RDB files created with checksum disabled have a checksum of zero that will 173 | # tell the loading code to skip the check. 174 | rdbchecksum yes 175 | 176 | # The filename where to dump the DB 177 | dbfilename dump.rdb 178 | 179 | # The working directory. 180 | # 181 | # The DB will be written inside this directory, with the filename specified 182 | # above using the 'dbfilename' configuration directive. 183 | # 184 | # The Append Only File will also be created inside this directory. 185 | # 186 | # Note that you must specify a directory here, not a file name. 187 | dir ./ 188 | 189 | ################################# REPLICATION ################################# 190 | 191 | # Master-Slave replication. Use slaveof to make a Redis instance a copy of 192 | # another Redis server. A few things to understand ASAP about Redis replication. 193 | # 194 | # 1) Redis replication is asynchronous, but you can configure a master to 195 | # stop accepting writes if it appears to be not connected with at least 196 | # a given number of slaves. 197 | # 2) Redis slaves are able to perform a partial resynchronization with the 198 | # master if the replication link is lost for a relatively small amount of 199 | # time. You may want to configure the replication backlog size (see the next 200 | # sections of this file) with a sensible value depending on your needs. 201 | # 3) Replication is automatic and does not need user intervention. After a 202 | # network partition slaves automatically try to reconnect to masters 203 | # and resynchronize with them. 204 | # 205 | # slaveof 206 | 207 | # If the master is password protected (using the "requirepass" configuration 208 | # directive below) it is possible to tell the slave to authenticate before 209 | # starting the replication synchronization process, otherwise the master will 210 | # refuse the slave request. 211 | # 212 | # masterauth 213 | 214 | # When a slave loses its connection with the master, or when the replication 215 | # is still in progress, the slave can act in two different ways: 216 | # 217 | # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will 218 | # still reply to client requests, possibly with out of date data, or the 219 | # data set may just be empty if this is the first synchronization. 220 | # 221 | # 2) if slave-serve-stale-data is set to 'no' the slave will reply with 222 | # an error "SYNC with master in progress" to all the kind of commands 223 | # but to INFO and SLAVEOF. 224 | # 225 | slave-serve-stale-data yes 226 | 227 | # You can configure a slave instance to accept writes or not. Writing against 228 | # a slave instance may be useful to store some ephemeral data (because data 229 | # written on a slave will be easily deleted after resync with the master) but 230 | # may also cause problems if clients are writing to it because of a 231 | # misconfiguration. 232 | # 233 | # Since Redis 2.6 by default slaves are read-only. 234 | # 235 | # Note: read only slaves are not designed to be exposed to untrusted clients 236 | # on the internet. It's just a protection layer against misuse of the instance. 237 | # Still a read only slave exports by default all the administrative commands 238 | # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve 239 | # security of read only slaves using 'rename-command' to shadow all the 240 | # administrative / dangerous commands. 241 | slave-read-only yes 242 | 243 | # Replication SYNC strategy: disk or socket. 244 | # 245 | # ------------------------------------------------------- 246 | # WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY 247 | # ------------------------------------------------------- 248 | # 249 | # New slaves and reconnecting slaves that are not able to continue the replication 250 | # process just receiving differences, need to do what is called a "full 251 | # synchronization". An RDB file is transmitted from the master to the slaves. 252 | # The transmission can happen in two different ways: 253 | # 254 | # 1) Disk-backed: The Redis master creates a new process that writes the RDB 255 | # file on disk. Later the file is transferred by the parent 256 | # process to the slaves incrementally. 257 | # 2) Diskless: The Redis master creates a new process that directly writes the 258 | # RDB file to slave sockets, without touching the disk at all. 259 | # 260 | # With disk-backed replication, while the RDB file is generated, more slaves 261 | # can be queued and served with the RDB file as soon as the current child producing 262 | # the RDB file finishes its work. With diskless replication instead once 263 | # the transfer starts, new slaves arriving will be queued and a new transfer 264 | # will start when the current one terminates. 265 | # 266 | # When diskless replication is used, the master waits a configurable amount of 267 | # time (in seconds) before starting the transfer in the hope that multiple slaves 268 | # will arrive and the transfer can be parallelized. 269 | # 270 | # With slow disks and fast (large bandwidth) networks, diskless replication 271 | # works better. 272 | repl-diskless-sync no 273 | 274 | # When diskless replication is enabled, it is possible to configure the delay 275 | # the server waits in order to spawn the child that transfers the RDB via socket 276 | # to the slaves. 277 | # 278 | # This is important since once the transfer starts, it is not possible to serve 279 | # new slaves arriving, that will be queued for the next RDB transfer, so the server 280 | # waits a delay in order to let more slaves arrive. 281 | # 282 | # The delay is specified in seconds, and by default is 5 seconds. To disable 283 | # it entirely just set it to 0 seconds and the transfer will start ASAP. 284 | repl-diskless-sync-delay 5 285 | 286 | # Slaves send PINGs to server in a predefined interval. It's possible to change 287 | # this interval with the repl_ping_slave_period option. The default value is 10 288 | # seconds. 289 | # 290 | # repl-ping-slave-period 10 291 | 292 | # The following option sets the replication timeout for: 293 | # 294 | # 1) Bulk transfer I/O during SYNC, from the point of view of slave. 295 | # 2) Master timeout from the point of view of slaves (data, pings). 296 | # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). 297 | # 298 | # It is important to make sure that this value is greater than the value 299 | # specified for repl-ping-slave-period otherwise a timeout will be detected 300 | # every time there is low traffic between the master and the slave. 301 | # 302 | # repl-timeout 60 303 | 304 | # Disable TCP_NODELAY on the slave socket after SYNC? 305 | # 306 | # If you select "yes" Redis will use a smaller number of TCP packets and 307 | # less bandwidth to send data to slaves. But this can add a delay for 308 | # the data to appear on the slave side, up to 40 milliseconds with 309 | # Linux kernels using a default configuration. 310 | # 311 | # If you select "no" the delay for data to appear on the slave side will 312 | # be reduced but more bandwidth will be used for replication. 313 | # 314 | # By default we optimize for low latency, but in very high traffic conditions 315 | # or when the master and slaves are many hops away, turning this to "yes" may 316 | # be a good idea. 317 | repl-disable-tcp-nodelay no 318 | 319 | # Set the replication backlog size. The backlog is a buffer that accumulates 320 | # slave data when slaves are disconnected for some time, so that when a slave 321 | # wants to reconnect again, often a full resync is not needed, but a partial 322 | # resync is enough, just passing the portion of data the slave missed while 323 | # disconnected. 324 | # 325 | # The bigger the replication backlog, the longer the time the slave can be 326 | # disconnected and later be able to perform a partial resynchronization. 327 | # 328 | # The backlog is only allocated once there is at least a slave connected. 329 | # 330 | # repl-backlog-size 1mb 331 | 332 | # After a master has no longer connected slaves for some time, the backlog 333 | # will be freed. The following option configures the amount of seconds that 334 | # need to elapse, starting from the time the last slave disconnected, for 335 | # the backlog buffer to be freed. 336 | # 337 | # A value of 0 means to never release the backlog. 338 | # 339 | # repl-backlog-ttl 3600 340 | 341 | # The slave priority is an integer number published by Redis in the INFO output. 342 | # It is used by Redis Sentinel in order to select a slave to promote into a 343 | # master if the master is no longer working correctly. 344 | # 345 | # A slave with a low priority number is considered better for promotion, so 346 | # for instance if there are three slaves with priority 10, 100, 25 Sentinel will 347 | # pick the one with priority 10, that is the lowest. 348 | # 349 | # However a special priority of 0 marks the slave as not able to perform the 350 | # role of master, so a slave with priority of 0 will never be selected by 351 | # Redis Sentinel for promotion. 352 | # 353 | # By default the priority is 100. 354 | slave-priority 100 355 | 356 | # It is possible for a master to stop accepting writes if there are less than 357 | # N slaves connected, having a lag less or equal than M seconds. 358 | # 359 | # The N slaves need to be in "online" state. 360 | # 361 | # The lag in seconds, that must be <= the specified value, is calculated from 362 | # the last ping received from the slave, that is usually sent every second. 363 | # 364 | # This option does not GUARANTEE that N replicas will accept the write, but 365 | # will limit the window of exposure for lost writes in case not enough slaves 366 | # are available, to the specified number of seconds. 367 | # 368 | # For example to require at least 3 slaves with a lag <= 10 seconds use: 369 | # 370 | # min-slaves-to-write 3 371 | # min-slaves-max-lag 10 372 | # 373 | # Setting one or the other to 0 disables the feature. 374 | # 375 | # By default min-slaves-to-write is set to 0 (feature disabled) and 376 | # min-slaves-max-lag is set to 10. 377 | 378 | ################################## SECURITY ################################### 379 | 380 | # Require clients to issue AUTH before processing any other 381 | # commands. This might be useful in environments in which you do not trust 382 | # others with access to the host running redis-server. 383 | # 384 | # This should stay commented out for backward compatibility and because most 385 | # people do not need auth (e.g. they run their own servers). 386 | # 387 | # Warning: since Redis is pretty fast an outside user can try up to 388 | # 150k passwords per second against a good box. This means that you should 389 | # use a very strong password otherwise it will be very easy to break. 390 | # 391 | # requirepass foobared 392 | 393 | # Command renaming. 394 | # 395 | # It is possible to change the name of dangerous commands in a shared 396 | # environment. For instance the CONFIG command may be renamed into something 397 | # hard to guess so that it will still be available for internal-use tools 398 | # but not available for general clients. 399 | # 400 | # Example: 401 | # 402 | # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 403 | # 404 | # It is also possible to completely kill a command by renaming it into 405 | # an empty string: 406 | # 407 | # rename-command CONFIG "" 408 | # 409 | # Please note that changing the name of commands that are logged into the 410 | # AOF file or transmitted to slaves may cause problems. 411 | 412 | ################################### LIMITS #################################### 413 | 414 | # Set the max number of connected clients at the same time. By default 415 | # this limit is set to 10000 clients, however if the Redis server is not 416 | # able to configure the process file limit to allow for the specified limit 417 | # the max number of allowed clients is set to the current file limit 418 | # minus 32 (as Redis reserves a few file descriptors for internal uses). 419 | # 420 | # Once the limit is reached Redis will close all the new connections sending 421 | # an error 'max number of clients reached'. 422 | # 423 | # maxclients 10000 424 | 425 | # Don't use more memory than the specified amount of bytes. 426 | # When the memory limit is reached Redis will try to remove keys 427 | # according to the eviction policy selected (see maxmemory-policy). 428 | # 429 | # If Redis can't remove keys according to the policy, or if the policy is 430 | # set to 'noeviction', Redis will start to reply with errors to commands 431 | # that would use more memory, like SET, LPUSH, and so on, and will continue 432 | # to reply to read-only commands like GET. 433 | # 434 | # This option is usually useful when using Redis as an LRU cache, or to set 435 | # a hard memory limit for an instance (using the 'noeviction' policy). 436 | # 437 | # WARNING: If you have slaves attached to an instance with maxmemory on, 438 | # the size of the output buffers needed to feed the slaves are subtracted 439 | # from the used memory count, so that network problems / resyncs will 440 | # not trigger a loop where keys are evicted, and in turn the output 441 | # buffer of slaves is full with DELs of keys evicted triggering the deletion 442 | # of more keys, and so forth until the database is completely emptied. 443 | # 444 | # In short... if you have slaves attached it is suggested that you set a lower 445 | # limit for maxmemory so that there is some free RAM on the system for slave 446 | # output buffers (but this is not needed if the policy is 'noeviction'). 447 | # 448 | # maxmemory 449 | 450 | # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory 451 | # is reached. You can select among five behaviors: 452 | # 453 | # volatile-lru -> remove the key with an expire set using an LRU algorithm 454 | # allkeys-lru -> remove any key according to the LRU algorithm 455 | # volatile-random -> remove a random key with an expire set 456 | # allkeys-random -> remove a random key, any key 457 | # volatile-ttl -> remove the key with the nearest expire time (minor TTL) 458 | # noeviction -> don't expire at all, just return an error on write operations 459 | # 460 | # Note: with any of the above policies, Redis will return an error on write 461 | # operations, when there are no suitable keys for eviction. 462 | # 463 | # At the date of writing these commands are: set setnx setex append 464 | # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd 465 | # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby 466 | # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby 467 | # getset mset msetnx exec sort 468 | # 469 | # The default is: 470 | # 471 | # maxmemory-policy noeviction 472 | 473 | # LRU and minimal TTL algorithms are not precise algorithms but approximated 474 | # algorithms (in order to save memory), so you can tune it for speed or 475 | # accuracy. For default Redis will check five keys and pick the one that was 476 | # used less recently, you can change the sample size using the following 477 | # configuration directive. 478 | # 479 | # The default of 5 produces good enough results. 10 Approximates very closely 480 | # true LRU but costs a bit more CPU. 3 is very fast but not very accurate. 481 | # 482 | # maxmemory-samples 5 483 | 484 | ############################## APPEND ONLY MODE ############################### 485 | 486 | # By default Redis asynchronously dumps the dataset on disk. This mode is 487 | # good enough in many applications, but an issue with the Redis process or 488 | # a power outage may result into a few minutes of writes lost (depending on 489 | # the configured save points). 490 | # 491 | # The Append Only File is an alternative persistence mode that provides 492 | # much better durability. For instance using the default data fsync policy 493 | # (see later in the config file) Redis can lose just one second of writes in a 494 | # dramatic event like a server power outage, or a single write if something 495 | # wrong with the Redis process itself happens, but the operating system is 496 | # still running correctly. 497 | # 498 | # AOF and RDB persistence can be enabled at the same time without problems. 499 | # If the AOF is enabled on startup Redis will load the AOF, that is the file 500 | # with the better durability guarantees. 501 | # 502 | # Please check http://redis.io/topics/persistence for more information. 503 | 504 | appendonly no 505 | 506 | # The name of the append only file (default: "appendonly.aof") 507 | 508 | appendfilename "appendonly.aof" 509 | 510 | # The fsync() call tells the Operating System to actually write data on disk 511 | # instead of waiting for more data in the output buffer. Some OS will really flush 512 | # data on disk, some other OS will just try to do it ASAP. 513 | # 514 | # Redis supports three different modes: 515 | # 516 | # no: don't fsync, just let the OS flush the data when it wants. Faster. 517 | # always: fsync after every write to the append only log. Slow, Safest. 518 | # everysec: fsync only one time every second. Compromise. 519 | # 520 | # The default is "everysec", as that's usually the right compromise between 521 | # speed and data safety. It's up to you to understand if you can relax this to 522 | # "no" that will let the operating system flush the output buffer when 523 | # it wants, for better performances (but if you can live with the idea of 524 | # some data loss consider the default persistence mode that's snapshotting), 525 | # or on the contrary, use "always" that's very slow but a bit safer than 526 | # everysec. 527 | # 528 | # More details please check the following article: 529 | # http://antirez.com/post/redis-persistence-demystified.html 530 | # 531 | # If unsure, use "everysec". 532 | 533 | # appendfsync always 534 | appendfsync everysec 535 | # appendfsync no 536 | 537 | # When the AOF fsync policy is set to always or everysec, and a background 538 | # saving process (a background save or AOF log background rewriting) is 539 | # performing a lot of I/O against the disk, in some Linux configurations 540 | # Redis may block too long on the fsync() call. Note that there is no fix for 541 | # this currently, as even performing fsync in a different thread will block 542 | # our synchronous write(2) call. 543 | # 544 | # In order to mitigate this problem it's possible to use the following option 545 | # that will prevent fsync() from being called in the main process while a 546 | # BGSAVE or BGREWRITEAOF is in progress. 547 | # 548 | # This means that while another child is saving, the durability of Redis is 549 | # the same as "appendfsync none". In practical terms, this means that it is 550 | # possible to lose up to 30 seconds of log in the worst scenario (with the 551 | # default Linux settings). 552 | # 553 | # If you have latency problems turn this to "yes". Otherwise leave it as 554 | # "no" that is the safest pick from the point of view of durability. 555 | 556 | no-appendfsync-on-rewrite no 557 | 558 | # Automatic rewrite of the append only file. 559 | # Redis is able to automatically rewrite the log file implicitly calling 560 | # BGREWRITEAOF when the AOF log size grows by the specified percentage. 561 | # 562 | # This is how it works: Redis remembers the size of the AOF file after the 563 | # latest rewrite (if no rewrite has happened since the restart, the size of 564 | # the AOF at startup is used). 565 | # 566 | # This base size is compared to the current size. If the current size is 567 | # bigger than the specified percentage, the rewrite is triggered. Also 568 | # you need to specify a minimal size for the AOF file to be rewritten, this 569 | # is useful to avoid rewriting the AOF file even if the percentage increase 570 | # is reached but it is still pretty small. 571 | # 572 | # Specify a percentage of zero in order to disable the automatic AOF 573 | # rewrite feature. 574 | 575 | auto-aof-rewrite-percentage 100 576 | auto-aof-rewrite-min-size 64mb 577 | 578 | # An AOF file may be found to be truncated at the end during the Redis 579 | # startup process, when the AOF data gets loaded back into memory. 580 | # This may happen when the system where Redis is running 581 | # crashes, especially when an ext4 filesystem is mounted without the 582 | # data=ordered option (however this can't happen when Redis itself 583 | # crashes or aborts but the operating system still works correctly). 584 | # 585 | # Redis can either exit with an error when this happens, or load as much 586 | # data as possible (the default now) and start if the AOF file is found 587 | # to be truncated at the end. The following option controls this behavior. 588 | # 589 | # If aof-load-truncated is set to yes, a truncated AOF file is loaded and 590 | # the Redis server starts emitting a log to inform the user of the event. 591 | # Otherwise if the option is set to no, the server aborts with an error 592 | # and refuses to start. When the option is set to no, the user requires 593 | # to fix the AOF file using the "redis-check-aof" utility before to restart 594 | # the server. 595 | # 596 | # Note that if the AOF file will be found to be corrupted in the middle 597 | # the server will still exit with an error. This option only applies when 598 | # Redis will try to read more data from the AOF file but not enough bytes 599 | # will be found. 600 | aof-load-truncated yes 601 | 602 | ################################ LUA SCRIPTING ############################### 603 | 604 | # Max execution time of a Lua script in milliseconds. 605 | # 606 | # If the maximum execution time is reached Redis will log that a script is 607 | # still in execution after the maximum allowed time and will start to 608 | # reply to queries with an error. 609 | # 610 | # When a long running script exceeds the maximum execution time only the 611 | # SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be 612 | # used to stop a script that did not yet called write commands. The second 613 | # is the only way to shut down the server in the case a write command was 614 | # already issued by the script but the user doesn't want to wait for the natural 615 | # termination of the script. 616 | # 617 | # Set it to 0 or a negative value for unlimited execution without warnings. 618 | lua-time-limit 5000 619 | 620 | ################################ REDIS CLUSTER ############################### 621 | # 622 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 623 | # WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however 624 | # in order to mark it as "mature" we need to wait for a non trivial percentage 625 | # of users to deploy it in production. 626 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 627 | # 628 | # Normal Redis instances can't be part of a Redis Cluster; only nodes that are 629 | # started as cluster nodes can. In order to start a Redis instance as a 630 | # cluster node enable the cluster support uncommenting the following: 631 | # 632 | # cluster-enabled yes 633 | 634 | # Every cluster node has a cluster configuration file. This file is not 635 | # intended to be edited by hand. It is created and updated by Redis nodes. 636 | # Every Redis Cluster node requires a different cluster configuration file. 637 | # Make sure that instances running in the same system do not have 638 | # overlapping cluster configuration file names. 639 | # 640 | # cluster-config-file nodes-6379.conf 641 | 642 | # Cluster node timeout is the amount of milliseconds a node must be unreachable 643 | # for it to be considered in failure state. 644 | # Most other internal time limits are multiple of the node timeout. 645 | # 646 | # cluster-node-timeout 15000 647 | 648 | # A slave of a failing master will avoid to start a failover if its data 649 | # looks too old. 650 | # 651 | # There is no simple way for a slave to actually have a exact measure of 652 | # its "data age", so the following two checks are performed: 653 | # 654 | # 1) If there are multiple slaves able to failover, they exchange messages 655 | # in order to try to give an advantage to the slave with the best 656 | # replication offset (more data from the master processed). 657 | # Slaves will try to get their rank by offset, and apply to the start 658 | # of the failover a delay proportional to their rank. 659 | # 660 | # 2) Every single slave computes the time of the last interaction with 661 | # its master. This can be the last ping or command received (if the master 662 | # is still in the "connected" state), or the time that elapsed since the 663 | # disconnection with the master (if the replication link is currently down). 664 | # If the last interaction is too old, the slave will not try to failover 665 | # at all. 666 | # 667 | # The point "2" can be tuned by user. Specifically a slave will not perform 668 | # the failover if, since the last interaction with the master, the time 669 | # elapsed is greater than: 670 | # 671 | # (node-timeout * slave-validity-factor) + repl-ping-slave-period 672 | # 673 | # So for example if node-timeout is 30 seconds, and the slave-validity-factor 674 | # is 10, and assuming a default repl-ping-slave-period of 10 seconds, the 675 | # slave will not try to failover if it was not able to talk with the master 676 | # for longer than 310 seconds. 677 | # 678 | # A large slave-validity-factor may allow slaves with too old data to failover 679 | # a master, while a too small value may prevent the cluster from being able to 680 | # elect a slave at all. 681 | # 682 | # For maximum availability, it is possible to set the slave-validity-factor 683 | # to a value of 0, which means, that slaves will always try to failover the 684 | # master regardless of the last time they interacted with the master. 685 | # (However they'll always try to apply a delay proportional to their 686 | # offset rank). 687 | # 688 | # Zero is the only value able to guarantee that when all the partitions heal 689 | # the cluster will always be able to continue. 690 | # 691 | # cluster-slave-validity-factor 10 692 | 693 | # Cluster slaves are able to migrate to orphaned masters, that are masters 694 | # that are left without working slaves. This improves the cluster ability 695 | # to resist to failures as otherwise an orphaned master can't be failed over 696 | # in case of failure if it has no working slaves. 697 | # 698 | # Slaves migrate to orphaned masters only if there are still at least a 699 | # given number of other working slaves for their old master. This number 700 | # is the "migration barrier". A migration barrier of 1 means that a slave 701 | # will migrate only if there is at least 1 other working slave for its master 702 | # and so forth. It usually reflects the number of slaves you want for every 703 | # master in your cluster. 704 | # 705 | # Default is 1 (slaves migrate only if their masters remain with at least 706 | # one slave). To disable migration just set it to a very large value. 707 | # A value of 0 can be set but is useful only for debugging and dangerous 708 | # in production. 709 | # 710 | # cluster-migration-barrier 1 711 | 712 | # By default Redis Cluster nodes stop accepting queries if they detect there 713 | # is at least an hash slot uncovered (no available node is serving it). 714 | # This way if the cluster is partially down (for example a range of hash slots 715 | # are no longer covered) all the cluster becomes, eventually, unavailable. 716 | # It automatically returns available as soon as all the slots are covered again. 717 | # 718 | # However sometimes you want the subset of the cluster which is working, 719 | # to continue to accept queries for the part of the key space that is still 720 | # covered. In order to do so, just set the cluster-require-full-coverage 721 | # option to no. 722 | # 723 | # cluster-require-full-coverage yes 724 | 725 | # In order to setup your cluster make sure to read the documentation 726 | # available at http://redis.io web site. 727 | 728 | ################################## SLOW LOG ################################### 729 | 730 | # The Redis Slow Log is a system to log queries that exceeded a specified 731 | # execution time. The execution time does not include the I/O operations 732 | # like talking with the client, sending the reply and so forth, 733 | # but just the time needed to actually execute the command (this is the only 734 | # stage of command execution where the thread is blocked and can not serve 735 | # other requests in the meantime). 736 | # 737 | # You can configure the slow log with two parameters: one tells Redis 738 | # what is the execution time, in microseconds, to exceed in order for the 739 | # command to get logged, and the other parameter is the length of the 740 | # slow log. When a new command is logged the oldest one is removed from the 741 | # queue of logged commands. 742 | 743 | # The following time is expressed in microseconds, so 1000000 is equivalent 744 | # to one second. Note that a negative number disables the slow log, while 745 | # a value of zero forces the logging of every command. 746 | slowlog-log-slower-than 10000 747 | 748 | # There is no limit to this length. Just be aware that it will consume memory. 749 | # You can reclaim memory used by the slow log with SLOWLOG RESET. 750 | slowlog-max-len 128 751 | 752 | ################################ LATENCY MONITOR ############################## 753 | 754 | # The Redis latency monitoring subsystem samples different operations 755 | # at runtime in order to collect data related to possible sources of 756 | # latency of a Redis instance. 757 | # 758 | # Via the LATENCY command this information is available to the user that can 759 | # print graphs and obtain reports. 760 | # 761 | # The system only logs operations that were performed in a time equal or 762 | # greater than the amount of milliseconds specified via the 763 | # latency-monitor-threshold configuration directive. When its value is set 764 | # to zero, the latency monitor is turned off. 765 | # 766 | # By default latency monitoring is disabled since it is mostly not needed 767 | # if you don't have latency issues, and collecting data has a performance 768 | # impact, that while very small, can be measured under big load. Latency 769 | # monitoring can easily be enabled at runtime using the command 770 | # "CONFIG SET latency-monitor-threshold " if needed. 771 | latency-monitor-threshold 0 772 | 773 | ############################# EVENT NOTIFICATION ############################## 774 | 775 | # Redis can notify Pub/Sub clients about events happening in the key space. 776 | # This feature is documented at http://redis.io/topics/notifications 777 | # 778 | # For instance if keyspace events notification is enabled, and a client 779 | # performs a DEL operation on key "foo" stored in the Database 0, two 780 | # messages will be published via Pub/Sub: 781 | # 782 | # PUBLISH __keyspace@0__:foo del 783 | # PUBLISH __keyevent@0__:del foo 784 | # 785 | # It is possible to select the events that Redis will notify among a set 786 | # of classes. Every class is identified by a single character: 787 | # 788 | # K Keyspace events, published with __keyspace@__ prefix. 789 | # E Keyevent events, published with __keyevent@__ prefix. 790 | # g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... 791 | # $ String commands 792 | # l List commands 793 | # s Set commands 794 | # h Hash commands 795 | # z Sorted set commands 796 | # x Expired events (events generated every time a key expires) 797 | # e Evicted events (events generated when a key is evicted for maxmemory) 798 | # A Alias for g$lshzxe, so that the "AKE" string means all the events. 799 | # 800 | # The "notify-keyspace-events" takes as argument a string that is composed 801 | # of zero or multiple characters. The empty string means that notifications 802 | # are disabled. 803 | # 804 | # Example: to enable list and generic events, from the point of view of the 805 | # event name, use: 806 | # 807 | # notify-keyspace-events Elg 808 | # 809 | # Example 2: to get the stream of the expired keys subscribing to channel 810 | # name __keyevent@0__:expired use: 811 | # 812 | # notify-keyspace-events Ex 813 | # 814 | # By default all notifications are disabled because most users don't need 815 | # this feature and the feature has some overhead. Note that if you don't 816 | # specify at least one of K or E, no events will be delivered. 817 | notify-keyspace-events "" 818 | 819 | ############################### ADVANCED CONFIG ############################### 820 | 821 | # Hashes are encoded using a memory efficient data structure when they have a 822 | # small number of entries, and the biggest entry does not exceed a given 823 | # threshold. These thresholds can be configured using the following directives. 824 | hash-max-ziplist-entries 512 825 | hash-max-ziplist-value 64 826 | 827 | # Similarly to hashes, small lists are also encoded in a special way in order 828 | # to save a lot of space. The special representation is only used when 829 | # you are under the following limits: 830 | list-max-ziplist-entries 512 831 | list-max-ziplist-value 64 832 | 833 | # Sets have a special encoding in just one case: when a set is composed 834 | # of just strings that happen to be integers in radix 10 in the range 835 | # of 64 bit signed integers. 836 | # The following configuration setting sets the limit in the size of the 837 | # set in order to use this special memory saving encoding. 838 | set-max-intset-entries 512 839 | 840 | # Similarly to hashes and lists, sorted sets are also specially encoded in 841 | # order to save a lot of space. This encoding is only used when the length and 842 | # elements of a sorted set are below the following limits: 843 | zset-max-ziplist-entries 128 844 | zset-max-ziplist-value 64 845 | 846 | # HyperLogLog sparse representation bytes limit. The limit includes the 847 | # 16 bytes header. When an HyperLogLog using the sparse representation crosses 848 | # this limit, it is converted into the dense representation. 849 | # 850 | # A value greater than 16000 is totally useless, since at that point the 851 | # dense representation is more memory efficient. 852 | # 853 | # The suggested value is ~ 3000 in order to have the benefits of 854 | # the space efficient encoding without slowing down too much PFADD, 855 | # which is O(N) with the sparse encoding. The value can be raised to 856 | # ~ 10000 when CPU is not a concern, but space is, and the data set is 857 | # composed of many HyperLogLogs with cardinality in the 0 - 15000 range. 858 | hll-sparse-max-bytes 3000 859 | 860 | # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in 861 | # order to help rehashing the main Redis hash table (the one mapping top-level 862 | # keys to values). The hash table implementation Redis uses (see dict.c) 863 | # performs a lazy rehashing: the more operation you run into a hash table 864 | # that is rehashing, the more rehashing "steps" are performed, so if the 865 | # server is idle the rehashing is never complete and some more memory is used 866 | # by the hash table. 867 | # 868 | # The default is to use this millisecond 10 times every second in order to 869 | # actively rehash the main dictionaries, freeing memory when possible. 870 | # 871 | # If unsure: 872 | # use "activerehashing no" if you have hard latency requirements and it is 873 | # not a good thing in your environment that Redis can reply from time to time 874 | # to queries with 2 milliseconds delay. 875 | # 876 | # use "activerehashing yes" if you don't have such hard requirements but 877 | # want to free memory asap when possible. 878 | activerehashing yes 879 | 880 | # The client output buffer limits can be used to force disconnection of clients 881 | # that are not reading data from the server fast enough for some reason (a 882 | # common reason is that a Pub/Sub client can't consume messages as fast as the 883 | # publisher can produce them). 884 | # 885 | # The limit can be set differently for the three different classes of clients: 886 | # 887 | # normal -> normal clients including MONITOR clients 888 | # slave -> slave clients 889 | # pubsub -> clients subscribed to at least one pubsub channel or pattern 890 | # 891 | # The syntax of every client-output-buffer-limit directive is the following: 892 | # 893 | # client-output-buffer-limit 894 | # 895 | # A client is immediately disconnected once the hard limit is reached, or if 896 | # the soft limit is reached and remains reached for the specified number of 897 | # seconds (continuously). 898 | # So for instance if the hard limit is 32 megabytes and the soft limit is 899 | # 16 megabytes / 10 seconds, the client will get disconnected immediately 900 | # if the size of the output buffers reach 32 megabytes, but will also get 901 | # disconnected if the client reaches 16 megabytes and continuously overcomes 902 | # the limit for 10 seconds. 903 | # 904 | # By default normal clients are not limited because they don't receive data 905 | # without asking (in a push way), but just after a request, so only 906 | # asynchronous clients may create a scenario where data is requested faster 907 | # than it can read. 908 | # 909 | # Instead there is a default limit for pubsub and slave clients, since 910 | # subscribers and slaves receive data in a push fashion. 911 | # 912 | # Both the hard or the soft limit can be disabled by setting them to zero. 913 | client-output-buffer-limit normal 0 0 0 914 | client-output-buffer-limit slave 256mb 64mb 60 915 | client-output-buffer-limit pubsub 32mb 8mb 60 916 | 917 | # Redis calls an internal function to perform many background tasks, like 918 | # closing connections of clients in timeout, purging expired keys that are 919 | # never requested, and so forth. 920 | # 921 | # Not all tasks are performed with the same frequency, but Redis checks for 922 | # tasks to perform according to the specified "hz" value. 923 | # 924 | # By default "hz" is set to 10. Raising the value will use more CPU when 925 | # Redis is idle, but at the same time will make Redis more responsive when 926 | # there are many keys expiring at the same time, and timeouts may be 927 | # handled with more precision. 928 | # 929 | # The range is between 1 and 500, however a value over 100 is usually not 930 | # a good idea. Most users should use the default of 10 and raise this up to 931 | # 100 only in environments where very low latency is required. 932 | hz 10 933 | 934 | # When a child rewrites the AOF file, if the following option is enabled 935 | # the file will be fsync-ed every 32 MB of data generated. This is useful 936 | # in order to commit the file to the disk more incrementally and avoid 937 | # big latency spikes. 938 | aof-rewrite-incremental-fsync yes 939 | -------------------------------------------------------------------------------- /sentinel3/linux/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Example sentinel.conf 2 | 3 | # port 4 | # The port that this sentinel instance will run on 5 | port 26379 6 | 7 | # sentinel announce-ip 8 | # sentinel announce-port 9 | # 10 | # The above two configuration directives are useful in environments where, 11 | # because of NAT, Sentinel is reachable from outside via a non-local address. 12 | # 13 | # When announce-ip is provided, the Sentinel will claim the specified IP address 14 | # in HELLO messages used to gossip its presence, instead of auto-detecting the 15 | # local address as it usually does. 16 | # 17 | # Similarly when announce-port is provided and is valid and non-zero, Sentinel 18 | # will announce the specified TCP port. 19 | # 20 | # The two options don't need to be used together, if only announce-ip is 21 | # provided, the Sentinel will announce the specified IP and the server port 22 | # as specified by the "port" option. If only announce-port is provided, the 23 | # Sentinel will announce the auto-detected local IP and the specified port. 24 | # 25 | # Example: 26 | # 27 | # sentinel announce-ip 1.2.3.4 28 | 29 | # dir 30 | # Every long running process should have a well-defined working directory. 31 | # For Redis Sentinel to chdir to /tmp at startup is the simplest thing 32 | # for the process to don't interfere with administrative tasks such as 33 | # unmounting filesystems. 34 | dir /tmp 35 | 36 | # sentinel monitor 37 | # 38 | # Tells Sentinel to monitor this master, and to consider it in O_DOWN 39 | # (Objectively Down) state only if at least sentinels agree. 40 | # 41 | # Note that whatever is the ODOWN quorum, a Sentinel will require to 42 | # be elected by the majority of the known Sentinels in order to 43 | # start a failover, so no failover can be performed in minority. 44 | # 45 | # Slaves are auto-discovered, so you don't need to specify slaves in 46 | # any way. Sentinel itself will rewrite this configuration file adding 47 | # the slaves using additional configuration options. 48 | # Also note that the configuration file is rewritten when a 49 | # slave is promoted to master. 50 | # 51 | # Note: master name should not include special characters or spaces. 52 | # The valid charset is A-z 0-9 and the three characters ".-_". 53 | sentinel monitor mymaster 127.0.0.1 6379 2 54 | 55 | # sentinel auth-pass 56 | # 57 | # Set the password to use to authenticate with the master and slaves. 58 | # Useful if there is a password set in the Redis instances to monitor. 59 | # 60 | # Note that the master password is also used for slaves, so it is not 61 | # possible to set a different password in masters and slaves instances 62 | # if you want to be able to monitor these instances with Sentinel. 63 | # 64 | # However you can have Redis instances without the authentication enabled 65 | # mixed with Redis instances requiring the authentication (as long as the 66 | # password set is the same for all the instances requiring the password) as 67 | # the AUTH command will have no effect in Redis instances with authentication 68 | # switched off. 69 | # 70 | # Example: 71 | # 72 | # sentinel auth-pass mymaster MySUPER--secret-0123passw0rd 73 | 74 | # sentinel down-after-milliseconds 75 | # 76 | # Number of milliseconds the master (or any attached slave or sentinel) should 77 | # be unreachable (as in, not acceptable reply to PING, continuously, for the 78 | # specified period) in order to consider it in S_DOWN state (Subjectively 79 | # Down). 80 | # 81 | # Default is 30 seconds. 82 | sentinel down-after-milliseconds mymaster 30000 83 | 84 | # sentinel parallel-syncs 85 | # 86 | # How many slaves we can reconfigure to point to the new slave simultaneously 87 | # during the failover. Use a low number if you use the slaves to serve query 88 | # to avoid that all the slaves will be unreachable at about the same 89 | # time while performing the synchronization with the master. 90 | sentinel parallel-syncs mymaster 1 91 | 92 | # sentinel failover-timeout 93 | # 94 | # Specifies the failover timeout in milliseconds. It is used in many ways: 95 | # 96 | # - The time needed to re-start a failover after a previous failover was 97 | # already tried against the same master by a given Sentinel, is two 98 | # times the failover timeout. 99 | # 100 | # - The time needed for a slave replicating to a wrong master according 101 | # to a Sentinel current configuration, to be forced to replicate 102 | # with the right master, is exactly the failover timeout (counting since 103 | # the moment a Sentinel detected the misconfiguration). 104 | # 105 | # - The time needed to cancel a failover that is already in progress but 106 | # did not produced any configuration change (SLAVEOF NO ONE yet not 107 | # acknowledged by the promoted slave). 108 | # 109 | # - The maximum time a failover in progress waits for all the slaves to be 110 | # reconfigured as slaves of the new master. However even after this time 111 | # the slaves will be reconfigured by the Sentinels anyway, but not with 112 | # the exact parallel-syncs progression as specified. 113 | # 114 | # Default is 3 minutes. 115 | sentinel failover-timeout mymaster 180000 116 | 117 | # SCRIPTS EXECUTION 118 | # 119 | # sentinel notification-script and sentinel reconfig-script are used in order 120 | # to configure scripts that are called to notify the system administrator 121 | # or to reconfigure clients after a failover. The scripts are executed 122 | # with the following rules for error handling: 123 | # 124 | # If script exits with "1" the execution is retried later (up to a maximum 125 | # number of times currently set to 10). 126 | # 127 | # If script exits with "2" (or an higher value) the script execution is 128 | # not retried. 129 | # 130 | # If script terminates because it receives a signal the behavior is the same 131 | # as exit code 1. 132 | # 133 | # A script has a maximum running time of 60 seconds. After this limit is 134 | # reached the script is terminated with a SIGKILL and the execution retried. 135 | 136 | # NOTIFICATION SCRIPT 137 | # 138 | # sentinel notification-script 139 | # 140 | # Call the specified notification script for any sentinel event that is 141 | # generated in the WARNING level (for instance -sdown, -odown, and so forth). 142 | # This script should notify the system administrator via email, SMS, or any 143 | # other messaging system, that there is something wrong with the monitored 144 | # Redis systems. 145 | # 146 | # The script is called with just two arguments: the first is the event type 147 | # and the second the event description. 148 | # 149 | # The script must exist and be executable in order for sentinel to start if 150 | # this option is provided. 151 | # 152 | # Example: 153 | # 154 | # sentinel notification-script mymaster /var/redis/notify.sh 155 | 156 | # CLIENTS RECONFIGURATION SCRIPT 157 | # 158 | # sentinel client-reconfig-script 159 | # 160 | # When the master changed because of a failover a script can be called in 161 | # order to perform application-specific tasks to notify the clients that the 162 | # configuration has changed and the master is at a different address. 163 | # 164 | # The following arguments are passed to the script: 165 | # 166 | # 167 | # 168 | # is currently always "failover" 169 | # is either "leader" or "observer" 170 | # 171 | # The arguments from-ip, from-port, to-ip, to-port are used to communicate 172 | # the old address of the master and the new address of the elected slave 173 | # (now a master). 174 | # 175 | # This script should be resistant to multiple invocations. 176 | # 177 | # Example: 178 | # 179 | # sentinel client-reconfig-script mymaster /var/redis/reconfig.sh 180 | 181 | 182 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6380/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | include redis.conf 3 | 4 | port 6380 5 | dir ./server-6380/state 6 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6380/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | 3 | port 26380 4 | dir ./server-6380/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6380/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=redis-server 2 | redis_sentinel=redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6380/redis.conf & 6 | $redis_sentinel server-6380/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6380/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/linux/server-6380/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/linux/server-6380/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26380 SHUTDOWN NOSAVE 5 | $redis_cli -p 6380 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6381/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | include redis.conf 3 | 4 | port 6381 5 | dir ./server-6381/state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6381/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | 3 | port 26381 4 | dir ./server-6381/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6381/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=redis-server 2 | redis_sentinel=redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6381/redis.conf & 6 | $redis_sentinel server-6381/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6381/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/linux/server-6381/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/linux/server-6381/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26381 SHUTDOWN NOSAVE 5 | $redis_cli -p 6381 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6382/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | include redis.conf 3 | 4 | port 6382 5 | dir ./server-6382/state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6382/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/linux 2 | 3 | port 26382 4 | dir ./server-6382/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | 7 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6382/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=redis-server 2 | redis_sentinel=redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6382/redis.conf & 6 | $redis_sentinel server-6382/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/linux/server-6382/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/linux/server-6382/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/linux/server-6382/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26382 SHUTDOWN NOSAVE 5 | $redis_cli -p 6382 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/linux/start-all.sh: -------------------------------------------------------------------------------- 1 | redis_server=redis-server 2 | redis_sentinel=redis-sentinel 3 | redis_cli=redis-cli 4 | 5 | $redis_server server-6380/redis.conf & 6 | $redis_sentinel server-6380/sentinel.conf & 7 | 8 | $redis_server server-6381/redis.conf & 9 | $redis_sentinel server-6381/sentinel.conf & 10 | 11 | $redis_server server-6382/redis.conf & 12 | $redis_sentinel server-6382/sentinel.conf & 13 | 14 | read -n1 -r -p "Press any key to see sentinel info on masters and slaves..." 15 | 16 | $redis_cli -p 26380 sentinel master mymaster 17 | $redis_cli -p 26381 sentinel slaves mymaster 18 | -------------------------------------------------------------------------------- /sentinel3/linux/stop-all.sh: -------------------------------------------------------------------------------- 1 | redis_cli=redis-cli 2 | 3 | $redis_cli -p 26382 SHUTDOWN NOSAVE 4 | $redis_cli -p 26381 SHUTDOWN NOSAVE 5 | $redis_cli -p 26380 SHUTDOWN NOSAVE 6 | 7 | $redis_cli -p 6382 SHUTDOWN NOSAVE 8 | $redis_cli -p 6381 SHUTDOWN NOSAVE 9 | $redis_cli -p 6380 SHUTDOWN NOSAVE 10 | -------------------------------------------------------------------------------- /sentinel3/osx/redis.conf: -------------------------------------------------------------------------------- 1 | # 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 /path/to/other.conf 32 | 33 | ################################ GENERAL ##################################### 34 | 35 | # By default Redis does not run as a daemon. Use 'yes' if you need it. 36 | # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. 37 | daemonize no 38 | 39 | # When running daemonized, Redis writes a pid file in /var/run/redis.pid by 40 | # default. You can specify a custom pid file location here. 41 | pidfile /var/run/redis.pid 42 | 43 | # Accept connections on the specified port, default is 6379. 44 | # If port 0 is specified Redis will not listen on a TCP socket. 45 | port 6379 46 | 47 | # TCP listen() backlog. 48 | # 49 | # In high requests-per-second environments you need an high backlog in order 50 | # to avoid slow clients connections issues. Note that the Linux kernel 51 | # will silently truncate it to the value of /proc/sys/net/core/somaxconn so 52 | # make sure to raise both the value of somaxconn and tcp_max_syn_backlog 53 | # in order to get the desired effect. 54 | tcp-backlog 511 55 | 56 | # By default Redis listens for connections from all the network interfaces 57 | # available on the server. It is possible to listen to just one or multiple 58 | # interfaces using the "bind" configuration directive, followed by one or 59 | # more IP addresses. 60 | # 61 | # Examples: 62 | # 63 | # bind 192.168.1.100 10.0.0.1 64 | # bind 127.0.0.1 65 | 66 | # Specify the path for the Unix socket that will be used to listen for 67 | # incoming connections. There is no default, so Redis will not listen 68 | # on a unix socket when not specified. 69 | # 70 | # unixsocket /tmp/redis.sock 71 | # unixsocketperm 700 72 | 73 | # Close the connection after a client is idle for N seconds (0 to disable) 74 | timeout 0 75 | 76 | # TCP keepalive. 77 | # 78 | # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence 79 | # of communication. This is useful for two reasons: 80 | # 81 | # 1) Detect dead peers. 82 | # 2) Take the connection alive from the point of view of network 83 | # equipment in the middle. 84 | # 85 | # On Linux, the specified value (in seconds) is the period used to send ACKs. 86 | # Note that to close the connection the double of the time is needed. 87 | # On other kernels the period depends on the kernel configuration. 88 | # 89 | # A reasonable value for this option is 60 seconds. 90 | tcp-keepalive 0 91 | 92 | # Specify the server verbosity level. 93 | # This can be one of: 94 | # debug (a lot of information, useful for development/testing) 95 | # verbose (many rarely useful info, but not a mess like the debug level) 96 | # notice (moderately verbose, what you want in production probably) 97 | # warning (only very important / critical messages are logged) 98 | loglevel notice 99 | 100 | # Specify the log file name. Also the empty string can be used to force 101 | # Redis to log on the standard output. Note that if you use standard 102 | # output for logging but daemonize, logs will be sent to /dev/null 103 | logfile "" 104 | 105 | # To enable logging to the system logger, just set 'syslog-enabled' to yes, 106 | # and optionally update the other syslog parameters to suit your needs. 107 | # syslog-enabled no 108 | 109 | # Specify the syslog identity. 110 | # syslog-ident redis 111 | 112 | # Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. 113 | # syslog-facility local0 114 | 115 | # Set the number of databases. The default database is DB 0, you can select 116 | # a different one on a per-connection basis using SELECT where 117 | # dbid is a number between 0 and 'databases'-1 118 | databases 16 119 | 120 | ################################ SNAPSHOTTING ################################ 121 | # 122 | # Save the DB on disk: 123 | # 124 | # save 125 | # 126 | # Will save the DB if both the given number of seconds and the given 127 | # number of write operations against the DB occurred. 128 | # 129 | # In the example below the behaviour will be to save: 130 | # after 900 sec (15 min) if at least 1 key changed 131 | # after 300 sec (5 min) if at least 10 keys changed 132 | # after 60 sec if at least 10000 keys changed 133 | # 134 | # Note: you can disable saving completely by commenting out all "save" lines. 135 | # 136 | # It is also possible to remove all the previously configured save 137 | # points by adding a save directive with a single empty string argument 138 | # like in the following example: 139 | # 140 | # save "" 141 | 142 | save 900 1 143 | save 300 10 144 | save 60 10000 145 | 146 | # By default Redis will stop accepting writes if RDB snapshots are enabled 147 | # (at least one save point) and the latest background save failed. 148 | # This will make the user aware (in a hard way) that data is not persisting 149 | # on disk properly, otherwise chances are that no one will notice and some 150 | # disaster will happen. 151 | # 152 | # If the background saving process will start working again Redis will 153 | # automatically allow writes again. 154 | # 155 | # However if you have setup your proper monitoring of the Redis server 156 | # and persistence, you may want to disable this feature so that Redis will 157 | # continue to work as usual even if there are problems with disk, 158 | # permissions, and so forth. 159 | stop-writes-on-bgsave-error yes 160 | 161 | # Compress string objects using LZF when dump .rdb databases? 162 | # For default that's set to 'yes' as it's almost always a win. 163 | # If you want to save some CPU in the saving child set it to 'no' but 164 | # the dataset will likely be bigger if you have compressible values or keys. 165 | rdbcompression yes 166 | 167 | # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. 168 | # This makes the format more resistant to corruption but there is a performance 169 | # hit to pay (around 10%) when saving and loading RDB files, so you can disable it 170 | # for maximum performances. 171 | # 172 | # RDB files created with checksum disabled have a checksum of zero that will 173 | # tell the loading code to skip the check. 174 | rdbchecksum yes 175 | 176 | # The filename where to dump the DB 177 | dbfilename dump.rdb 178 | 179 | # The working directory. 180 | # 181 | # The DB will be written inside this directory, with the filename specified 182 | # above using the 'dbfilename' configuration directive. 183 | # 184 | # The Append Only File will also be created inside this directory. 185 | # 186 | # Note that you must specify a directory here, not a file name. 187 | dir ./ 188 | 189 | ################################# REPLICATION ################################# 190 | 191 | # Master-Slave replication. Use slaveof to make a Redis instance a copy of 192 | # another Redis server. A few things to understand ASAP about Redis replication. 193 | # 194 | # 1) Redis replication is asynchronous, but you can configure a master to 195 | # stop accepting writes if it appears to be not connected with at least 196 | # a given number of slaves. 197 | # 2) Redis slaves are able to perform a partial resynchronization with the 198 | # master if the replication link is lost for a relatively small amount of 199 | # time. You may want to configure the replication backlog size (see the next 200 | # sections of this file) with a sensible value depending on your needs. 201 | # 3) Replication is automatic and does not need user intervention. After a 202 | # network partition slaves automatically try to reconnect to masters 203 | # and resynchronize with them. 204 | # 205 | # slaveof 206 | 207 | # If the master is password protected (using the "requirepass" configuration 208 | # directive below) it is possible to tell the slave to authenticate before 209 | # starting the replication synchronization process, otherwise the master will 210 | # refuse the slave request. 211 | # 212 | # masterauth 213 | 214 | # When a slave loses its connection with the master, or when the replication 215 | # is still in progress, the slave can act in two different ways: 216 | # 217 | # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will 218 | # still reply to client requests, possibly with out of date data, or the 219 | # data set may just be empty if this is the first synchronization. 220 | # 221 | # 2) if slave-serve-stale-data is set to 'no' the slave will reply with 222 | # an error "SYNC with master in progress" to all the kind of commands 223 | # but to INFO and SLAVEOF. 224 | # 225 | slave-serve-stale-data yes 226 | 227 | # You can configure a slave instance to accept writes or not. Writing against 228 | # a slave instance may be useful to store some ephemeral data (because data 229 | # written on a slave will be easily deleted after resync with the master) but 230 | # may also cause problems if clients are writing to it because of a 231 | # misconfiguration. 232 | # 233 | # Since Redis 2.6 by default slaves are read-only. 234 | # 235 | # Note: read only slaves are not designed to be exposed to untrusted clients 236 | # on the internet. It's just a protection layer against misuse of the instance. 237 | # Still a read only slave exports by default all the administrative commands 238 | # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve 239 | # security of read only slaves using 'rename-command' to shadow all the 240 | # administrative / dangerous commands. 241 | slave-read-only yes 242 | 243 | # Replication SYNC strategy: disk or socket. 244 | # 245 | # ------------------------------------------------------- 246 | # WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY 247 | # ------------------------------------------------------- 248 | # 249 | # New slaves and reconnecting slaves that are not able to continue the replication 250 | # process just receiving differences, need to do what is called a "full 251 | # synchronization". An RDB file is transmitted from the master to the slaves. 252 | # The transmission can happen in two different ways: 253 | # 254 | # 1) Disk-backed: The Redis master creates a new process that writes the RDB 255 | # file on disk. Later the file is transferred by the parent 256 | # process to the slaves incrementally. 257 | # 2) Diskless: The Redis master creates a new process that directly writes the 258 | # RDB file to slave sockets, without touching the disk at all. 259 | # 260 | # With disk-backed replication, while the RDB file is generated, more slaves 261 | # can be queued and served with the RDB file as soon as the current child producing 262 | # the RDB file finishes its work. With diskless replication instead once 263 | # the transfer starts, new slaves arriving will be queued and a new transfer 264 | # will start when the current one terminates. 265 | # 266 | # When diskless replication is used, the master waits a configurable amount of 267 | # time (in seconds) before starting the transfer in the hope that multiple slaves 268 | # will arrive and the transfer can be parallelized. 269 | # 270 | # With slow disks and fast (large bandwidth) networks, diskless replication 271 | # works better. 272 | repl-diskless-sync no 273 | 274 | # When diskless replication is enabled, it is possible to configure the delay 275 | # the server waits in order to spawn the child that transfers the RDB via socket 276 | # to the slaves. 277 | # 278 | # This is important since once the transfer starts, it is not possible to serve 279 | # new slaves arriving, that will be queued for the next RDB transfer, so the server 280 | # waits a delay in order to let more slaves arrive. 281 | # 282 | # The delay is specified in seconds, and by default is 5 seconds. To disable 283 | # it entirely just set it to 0 seconds and the transfer will start ASAP. 284 | repl-diskless-sync-delay 5 285 | 286 | # Slaves send PINGs to server in a predefined interval. It's possible to change 287 | # this interval with the repl_ping_slave_period option. The default value is 10 288 | # seconds. 289 | # 290 | # repl-ping-slave-period 10 291 | 292 | # The following option sets the replication timeout for: 293 | # 294 | # 1) Bulk transfer I/O during SYNC, from the point of view of slave. 295 | # 2) Master timeout from the point of view of slaves (data, pings). 296 | # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). 297 | # 298 | # It is important to make sure that this value is greater than the value 299 | # specified for repl-ping-slave-period otherwise a timeout will be detected 300 | # every time there is low traffic between the master and the slave. 301 | # 302 | # repl-timeout 60 303 | 304 | # Disable TCP_NODELAY on the slave socket after SYNC? 305 | # 306 | # If you select "yes" Redis will use a smaller number of TCP packets and 307 | # less bandwidth to send data to slaves. But this can add a delay for 308 | # the data to appear on the slave side, up to 40 milliseconds with 309 | # Linux kernels using a default configuration. 310 | # 311 | # If you select "no" the delay for data to appear on the slave side will 312 | # be reduced but more bandwidth will be used for replication. 313 | # 314 | # By default we optimize for low latency, but in very high traffic conditions 315 | # or when the master and slaves are many hops away, turning this to "yes" may 316 | # be a good idea. 317 | repl-disable-tcp-nodelay no 318 | 319 | # Set the replication backlog size. The backlog is a buffer that accumulates 320 | # slave data when slaves are disconnected for some time, so that when a slave 321 | # wants to reconnect again, often a full resync is not needed, but a partial 322 | # resync is enough, just passing the portion of data the slave missed while 323 | # disconnected. 324 | # 325 | # The bigger the replication backlog, the longer the time the slave can be 326 | # disconnected and later be able to perform a partial resynchronization. 327 | # 328 | # The backlog is only allocated once there is at least a slave connected. 329 | # 330 | # repl-backlog-size 1mb 331 | 332 | # After a master has no longer connected slaves for some time, the backlog 333 | # will be freed. The following option configures the amount of seconds that 334 | # need to elapse, starting from the time the last slave disconnected, for 335 | # the backlog buffer to be freed. 336 | # 337 | # A value of 0 means to never release the backlog. 338 | # 339 | # repl-backlog-ttl 3600 340 | 341 | # The slave priority is an integer number published by Redis in the INFO output. 342 | # It is used by Redis Sentinel in order to select a slave to promote into a 343 | # master if the master is no longer working correctly. 344 | # 345 | # A slave with a low priority number is considered better for promotion, so 346 | # for instance if there are three slaves with priority 10, 100, 25 Sentinel will 347 | # pick the one with priority 10, that is the lowest. 348 | # 349 | # However a special priority of 0 marks the slave as not able to perform the 350 | # role of master, so a slave with priority of 0 will never be selected by 351 | # Redis Sentinel for promotion. 352 | # 353 | # By default the priority is 100. 354 | slave-priority 100 355 | 356 | # It is possible for a master to stop accepting writes if there are less than 357 | # N slaves connected, having a lag less or equal than M seconds. 358 | # 359 | # The N slaves need to be in "online" state. 360 | # 361 | # The lag in seconds, that must be <= the specified value, is calculated from 362 | # the last ping received from the slave, that is usually sent every second. 363 | # 364 | # This option does not GUARANTEE that N replicas will accept the write, but 365 | # will limit the window of exposure for lost writes in case not enough slaves 366 | # are available, to the specified number of seconds. 367 | # 368 | # For example to require at least 3 slaves with a lag <= 10 seconds use: 369 | # 370 | # min-slaves-to-write 3 371 | # min-slaves-max-lag 10 372 | # 373 | # Setting one or the other to 0 disables the feature. 374 | # 375 | # By default min-slaves-to-write is set to 0 (feature disabled) and 376 | # min-slaves-max-lag is set to 10. 377 | 378 | ################################## SECURITY ################################### 379 | 380 | # Require clients to issue AUTH before processing any other 381 | # commands. This might be useful in environments in which you do not trust 382 | # others with access to the host running redis-server. 383 | # 384 | # This should stay commented out for backward compatibility and because most 385 | # people do not need auth (e.g. they run their own servers). 386 | # 387 | # Warning: since Redis is pretty fast an outside user can try up to 388 | # 150k passwords per second against a good box. This means that you should 389 | # use a very strong password otherwise it will be very easy to break. 390 | # 391 | # requirepass foobared 392 | 393 | # Command renaming. 394 | # 395 | # It is possible to change the name of dangerous commands in a shared 396 | # environment. For instance the CONFIG command may be renamed into something 397 | # hard to guess so that it will still be available for internal-use tools 398 | # but not available for general clients. 399 | # 400 | # Example: 401 | # 402 | # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 403 | # 404 | # It is also possible to completely kill a command by renaming it into 405 | # an empty string: 406 | # 407 | # rename-command CONFIG "" 408 | # 409 | # Please note that changing the name of commands that are logged into the 410 | # AOF file or transmitted to slaves may cause problems. 411 | 412 | ################################### LIMITS #################################### 413 | 414 | # Set the max number of connected clients at the same time. By default 415 | # this limit is set to 10000 clients, however if the Redis server is not 416 | # able to configure the process file limit to allow for the specified limit 417 | # the max number of allowed clients is set to the current file limit 418 | # minus 32 (as Redis reserves a few file descriptors for internal uses). 419 | # 420 | # Once the limit is reached Redis will close all the new connections sending 421 | # an error 'max number of clients reached'. 422 | # 423 | # maxclients 10000 424 | 425 | # Don't use more memory than the specified amount of bytes. 426 | # When the memory limit is reached Redis will try to remove keys 427 | # according to the eviction policy selected (see maxmemory-policy). 428 | # 429 | # If Redis can't remove keys according to the policy, or if the policy is 430 | # set to 'noeviction', Redis will start to reply with errors to commands 431 | # that would use more memory, like SET, LPUSH, and so on, and will continue 432 | # to reply to read-only commands like GET. 433 | # 434 | # This option is usually useful when using Redis as an LRU cache, or to set 435 | # a hard memory limit for an instance (using the 'noeviction' policy). 436 | # 437 | # WARNING: If you have slaves attached to an instance with maxmemory on, 438 | # the size of the output buffers needed to feed the slaves are subtracted 439 | # from the used memory count, so that network problems / resyncs will 440 | # not trigger a loop where keys are evicted, and in turn the output 441 | # buffer of slaves is full with DELs of keys evicted triggering the deletion 442 | # of more keys, and so forth until the database is completely emptied. 443 | # 444 | # In short... if you have slaves attached it is suggested that you set a lower 445 | # limit for maxmemory so that there is some free RAM on the system for slave 446 | # output buffers (but this is not needed if the policy is 'noeviction'). 447 | # 448 | # maxmemory 449 | 450 | # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory 451 | # is reached. You can select among five behaviors: 452 | # 453 | # volatile-lru -> remove the key with an expire set using an LRU algorithm 454 | # allkeys-lru -> remove any key according to the LRU algorithm 455 | # volatile-random -> remove a random key with an expire set 456 | # allkeys-random -> remove a random key, any key 457 | # volatile-ttl -> remove the key with the nearest expire time (minor TTL) 458 | # noeviction -> don't expire at all, just return an error on write operations 459 | # 460 | # Note: with any of the above policies, Redis will return an error on write 461 | # operations, when there are no suitable keys for eviction. 462 | # 463 | # At the date of writing these commands are: set setnx setex append 464 | # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd 465 | # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby 466 | # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby 467 | # getset mset msetnx exec sort 468 | # 469 | # The default is: 470 | # 471 | # maxmemory-policy noeviction 472 | 473 | # LRU and minimal TTL algorithms are not precise algorithms but approximated 474 | # algorithms (in order to save memory), so you can tune it for speed or 475 | # accuracy. For default Redis will check five keys and pick the one that was 476 | # used less recently, you can change the sample size using the following 477 | # configuration directive. 478 | # 479 | # The default of 5 produces good enough results. 10 Approximates very closely 480 | # true LRU but costs a bit more CPU. 3 is very fast but not very accurate. 481 | # 482 | # maxmemory-samples 5 483 | 484 | ############################## APPEND ONLY MODE ############################### 485 | 486 | # By default Redis asynchronously dumps the dataset on disk. This mode is 487 | # good enough in many applications, but an issue with the Redis process or 488 | # a power outage may result into a few minutes of writes lost (depending on 489 | # the configured save points). 490 | # 491 | # The Append Only File is an alternative persistence mode that provides 492 | # much better durability. For instance using the default data fsync policy 493 | # (see later in the config file) Redis can lose just one second of writes in a 494 | # dramatic event like a server power outage, or a single write if something 495 | # wrong with the Redis process itself happens, but the operating system is 496 | # still running correctly. 497 | # 498 | # AOF and RDB persistence can be enabled at the same time without problems. 499 | # If the AOF is enabled on startup Redis will load the AOF, that is the file 500 | # with the better durability guarantees. 501 | # 502 | # Please check http://redis.io/topics/persistence for more information. 503 | 504 | appendonly no 505 | 506 | # The name of the append only file (default: "appendonly.aof") 507 | 508 | appendfilename "appendonly.aof" 509 | 510 | # The fsync() call tells the Operating System to actually write data on disk 511 | # instead of waiting for more data in the output buffer. Some OS will really flush 512 | # data on disk, some other OS will just try to do it ASAP. 513 | # 514 | # Redis supports three different modes: 515 | # 516 | # no: don't fsync, just let the OS flush the data when it wants. Faster. 517 | # always: fsync after every write to the append only log. Slow, Safest. 518 | # everysec: fsync only one time every second. Compromise. 519 | # 520 | # The default is "everysec", as that's usually the right compromise between 521 | # speed and data safety. It's up to you to understand if you can relax this to 522 | # "no" that will let the operating system flush the output buffer when 523 | # it wants, for better performances (but if you can live with the idea of 524 | # some data loss consider the default persistence mode that's snapshotting), 525 | # or on the contrary, use "always" that's very slow but a bit safer than 526 | # everysec. 527 | # 528 | # More details please check the following article: 529 | # http://antirez.com/post/redis-persistence-demystified.html 530 | # 531 | # If unsure, use "everysec". 532 | 533 | # appendfsync always 534 | appendfsync everysec 535 | # appendfsync no 536 | 537 | # When the AOF fsync policy is set to always or everysec, and a background 538 | # saving process (a background save or AOF log background rewriting) is 539 | # performing a lot of I/O against the disk, in some Linux configurations 540 | # Redis may block too long on the fsync() call. Note that there is no fix for 541 | # this currently, as even performing fsync in a different thread will block 542 | # our synchronous write(2) call. 543 | # 544 | # In order to mitigate this problem it's possible to use the following option 545 | # that will prevent fsync() from being called in the main process while a 546 | # BGSAVE or BGREWRITEAOF is in progress. 547 | # 548 | # This means that while another child is saving, the durability of Redis is 549 | # the same as "appendfsync none". In practical terms, this means that it is 550 | # possible to lose up to 30 seconds of log in the worst scenario (with the 551 | # default Linux settings). 552 | # 553 | # If you have latency problems turn this to "yes". Otherwise leave it as 554 | # "no" that is the safest pick from the point of view of durability. 555 | 556 | no-appendfsync-on-rewrite no 557 | 558 | # Automatic rewrite of the append only file. 559 | # Redis is able to automatically rewrite the log file implicitly calling 560 | # BGREWRITEAOF when the AOF log size grows by the specified percentage. 561 | # 562 | # This is how it works: Redis remembers the size of the AOF file after the 563 | # latest rewrite (if no rewrite has happened since the restart, the size of 564 | # the AOF at startup is used). 565 | # 566 | # This base size is compared to the current size. If the current size is 567 | # bigger than the specified percentage, the rewrite is triggered. Also 568 | # you need to specify a minimal size for the AOF file to be rewritten, this 569 | # is useful to avoid rewriting the AOF file even if the percentage increase 570 | # is reached but it is still pretty small. 571 | # 572 | # Specify a percentage of zero in order to disable the automatic AOF 573 | # rewrite feature. 574 | 575 | auto-aof-rewrite-percentage 100 576 | auto-aof-rewrite-min-size 64mb 577 | 578 | # An AOF file may be found to be truncated at the end during the Redis 579 | # startup process, when the AOF data gets loaded back into memory. 580 | # This may happen when the system where Redis is running 581 | # crashes, especially when an ext4 filesystem is mounted without the 582 | # data=ordered option (however this can't happen when Redis itself 583 | # crashes or aborts but the operating system still works correctly). 584 | # 585 | # Redis can either exit with an error when this happens, or load as much 586 | # data as possible (the default now) and start if the AOF file is found 587 | # to be truncated at the end. The following option controls this behavior. 588 | # 589 | # If aof-load-truncated is set to yes, a truncated AOF file is loaded and 590 | # the Redis server starts emitting a log to inform the user of the event. 591 | # Otherwise if the option is set to no, the server aborts with an error 592 | # and refuses to start. When the option is set to no, the user requires 593 | # to fix the AOF file using the "redis-check-aof" utility before to restart 594 | # the server. 595 | # 596 | # Note that if the AOF file will be found to be corrupted in the middle 597 | # the server will still exit with an error. This option only applies when 598 | # Redis will try to read more data from the AOF file but not enough bytes 599 | # will be found. 600 | aof-load-truncated yes 601 | 602 | ################################ LUA SCRIPTING ############################### 603 | 604 | # Max execution time of a Lua script in milliseconds. 605 | # 606 | # If the maximum execution time is reached Redis will log that a script is 607 | # still in execution after the maximum allowed time and will start to 608 | # reply to queries with an error. 609 | # 610 | # When a long running script exceeds the maximum execution time only the 611 | # SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be 612 | # used to stop a script that did not yet called write commands. The second 613 | # is the only way to shut down the server in the case a write command was 614 | # already issued by the script but the user doesn't want to wait for the natural 615 | # termination of the script. 616 | # 617 | # Set it to 0 or a negative value for unlimited execution without warnings. 618 | lua-time-limit 5000 619 | 620 | ################################ REDIS CLUSTER ############################### 621 | # 622 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 623 | # WARNING EXPERIMENTAL: Redis Cluster is considered to be stable code, however 624 | # in order to mark it as "mature" we need to wait for a non trivial percentage 625 | # of users to deploy it in production. 626 | # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 627 | # 628 | # Normal Redis instances can't be part of a Redis Cluster; only nodes that are 629 | # started as cluster nodes can. In order to start a Redis instance as a 630 | # cluster node enable the cluster support uncommenting the following: 631 | # 632 | # cluster-enabled yes 633 | 634 | # Every cluster node has a cluster configuration file. This file is not 635 | # intended to be edited by hand. It is created and updated by Redis nodes. 636 | # Every Redis Cluster node requires a different cluster configuration file. 637 | # Make sure that instances running in the same system do not have 638 | # overlapping cluster configuration file names. 639 | # 640 | # cluster-config-file nodes-6379.conf 641 | 642 | # Cluster node timeout is the amount of milliseconds a node must be unreachable 643 | # for it to be considered in failure state. 644 | # Most other internal time limits are multiple of the node timeout. 645 | # 646 | # cluster-node-timeout 15000 647 | 648 | # A slave of a failing master will avoid to start a failover if its data 649 | # looks too old. 650 | # 651 | # There is no simple way for a slave to actually have a exact measure of 652 | # its "data age", so the following two checks are performed: 653 | # 654 | # 1) If there are multiple slaves able to failover, they exchange messages 655 | # in order to try to give an advantage to the slave with the best 656 | # replication offset (more data from the master processed). 657 | # Slaves will try to get their rank by offset, and apply to the start 658 | # of the failover a delay proportional to their rank. 659 | # 660 | # 2) Every single slave computes the time of the last interaction with 661 | # its master. This can be the last ping or command received (if the master 662 | # is still in the "connected" state), or the time that elapsed since the 663 | # disconnection with the master (if the replication link is currently down). 664 | # If the last interaction is too old, the slave will not try to failover 665 | # at all. 666 | # 667 | # The point "2" can be tuned by user. Specifically a slave will not perform 668 | # the failover if, since the last interaction with the master, the time 669 | # elapsed is greater than: 670 | # 671 | # (node-timeout * slave-validity-factor) + repl-ping-slave-period 672 | # 673 | # So for example if node-timeout is 30 seconds, and the slave-validity-factor 674 | # is 10, and assuming a default repl-ping-slave-period of 10 seconds, the 675 | # slave will not try to failover if it was not able to talk with the master 676 | # for longer than 310 seconds. 677 | # 678 | # A large slave-validity-factor may allow slaves with too old data to failover 679 | # a master, while a too small value may prevent the cluster from being able to 680 | # elect a slave at all. 681 | # 682 | # For maximum availability, it is possible to set the slave-validity-factor 683 | # to a value of 0, which means, that slaves will always try to failover the 684 | # master regardless of the last time they interacted with the master. 685 | # (However they'll always try to apply a delay proportional to their 686 | # offset rank). 687 | # 688 | # Zero is the only value able to guarantee that when all the partitions heal 689 | # the cluster will always be able to continue. 690 | # 691 | # cluster-slave-validity-factor 10 692 | 693 | # Cluster slaves are able to migrate to orphaned masters, that are masters 694 | # that are left without working slaves. This improves the cluster ability 695 | # to resist to failures as otherwise an orphaned master can't be failed over 696 | # in case of failure if it has no working slaves. 697 | # 698 | # Slaves migrate to orphaned masters only if there are still at least a 699 | # given number of other working slaves for their old master. This number 700 | # is the "migration barrier". A migration barrier of 1 means that a slave 701 | # will migrate only if there is at least 1 other working slave for its master 702 | # and so forth. It usually reflects the number of slaves you want for every 703 | # master in your cluster. 704 | # 705 | # Default is 1 (slaves migrate only if their masters remain with at least 706 | # one slave). To disable migration just set it to a very large value. 707 | # A value of 0 can be set but is useful only for debugging and dangerous 708 | # in production. 709 | # 710 | # cluster-migration-barrier 1 711 | 712 | # By default Redis Cluster nodes stop accepting queries if they detect there 713 | # is at least an hash slot uncovered (no available node is serving it). 714 | # This way if the cluster is partially down (for example a range of hash slots 715 | # are no longer covered) all the cluster becomes, eventually, unavailable. 716 | # It automatically returns available as soon as all the slots are covered again. 717 | # 718 | # However sometimes you want the subset of the cluster which is working, 719 | # to continue to accept queries for the part of the key space that is still 720 | # covered. In order to do so, just set the cluster-require-full-coverage 721 | # option to no. 722 | # 723 | # cluster-require-full-coverage yes 724 | 725 | # In order to setup your cluster make sure to read the documentation 726 | # available at http://redis.io web site. 727 | 728 | ################################## SLOW LOG ################################### 729 | 730 | # The Redis Slow Log is a system to log queries that exceeded a specified 731 | # execution time. The execution time does not include the I/O operations 732 | # like talking with the client, sending the reply and so forth, 733 | # but just the time needed to actually execute the command (this is the only 734 | # stage of command execution where the thread is blocked and can not serve 735 | # other requests in the meantime). 736 | # 737 | # You can configure the slow log with two parameters: one tells Redis 738 | # what is the execution time, in microseconds, to exceed in order for the 739 | # command to get logged, and the other parameter is the length of the 740 | # slow log. When a new command is logged the oldest one is removed from the 741 | # queue of logged commands. 742 | 743 | # The following time is expressed in microseconds, so 1000000 is equivalent 744 | # to one second. Note that a negative number disables the slow log, while 745 | # a value of zero forces the logging of every command. 746 | slowlog-log-slower-than 10000 747 | 748 | # There is no limit to this length. Just be aware that it will consume memory. 749 | # You can reclaim memory used by the slow log with SLOWLOG RESET. 750 | slowlog-max-len 128 751 | 752 | ################################ LATENCY MONITOR ############################## 753 | 754 | # The Redis latency monitoring subsystem samples different operations 755 | # at runtime in order to collect data related to possible sources of 756 | # latency of a Redis instance. 757 | # 758 | # Via the LATENCY command this information is available to the user that can 759 | # print graphs and obtain reports. 760 | # 761 | # The system only logs operations that were performed in a time equal or 762 | # greater than the amount of milliseconds specified via the 763 | # latency-monitor-threshold configuration directive. When its value is set 764 | # to zero, the latency monitor is turned off. 765 | # 766 | # By default latency monitoring is disabled since it is mostly not needed 767 | # if you don't have latency issues, and collecting data has a performance 768 | # impact, that while very small, can be measured under big load. Latency 769 | # monitoring can easily be enabled at runtime using the command 770 | # "CONFIG SET latency-monitor-threshold " if needed. 771 | latency-monitor-threshold 0 772 | 773 | ############################# EVENT NOTIFICATION ############################## 774 | 775 | # Redis can notify Pub/Sub clients about events happening in the key space. 776 | # This feature is documented at http://redis.io/topics/notifications 777 | # 778 | # For instance if keyspace events notification is enabled, and a client 779 | # performs a DEL operation on key "foo" stored in the Database 0, two 780 | # messages will be published via Pub/Sub: 781 | # 782 | # PUBLISH __keyspace@0__:foo del 783 | # PUBLISH __keyevent@0__:del foo 784 | # 785 | # It is possible to select the events that Redis will notify among a set 786 | # of classes. Every class is identified by a single character: 787 | # 788 | # K Keyspace events, published with __keyspace@__ prefix. 789 | # E Keyevent events, published with __keyevent@__ prefix. 790 | # g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... 791 | # $ String commands 792 | # l List commands 793 | # s Set commands 794 | # h Hash commands 795 | # z Sorted set commands 796 | # x Expired events (events generated every time a key expires) 797 | # e Evicted events (events generated when a key is evicted for maxmemory) 798 | # A Alias for g$lshzxe, so that the "AKE" string means all the events. 799 | # 800 | # The "notify-keyspace-events" takes as argument a string that is composed 801 | # of zero or multiple characters. The empty string means that notifications 802 | # are disabled. 803 | # 804 | # Example: to enable list and generic events, from the point of view of the 805 | # event name, use: 806 | # 807 | # notify-keyspace-events Elg 808 | # 809 | # Example 2: to get the stream of the expired keys subscribing to channel 810 | # name __keyevent@0__:expired use: 811 | # 812 | # notify-keyspace-events Ex 813 | # 814 | # By default all notifications are disabled because most users don't need 815 | # this feature and the feature has some overhead. Note that if you don't 816 | # specify at least one of K or E, no events will be delivered. 817 | notify-keyspace-events "" 818 | 819 | ############################### ADVANCED CONFIG ############################### 820 | 821 | # Hashes are encoded using a memory efficient data structure when they have a 822 | # small number of entries, and the biggest entry does not exceed a given 823 | # threshold. These thresholds can be configured using the following directives. 824 | hash-max-ziplist-entries 512 825 | hash-max-ziplist-value 64 826 | 827 | # Similarly to hashes, small lists are also encoded in a special way in order 828 | # to save a lot of space. The special representation is only used when 829 | # you are under the following limits: 830 | list-max-ziplist-entries 512 831 | list-max-ziplist-value 64 832 | 833 | # Sets have a special encoding in just one case: when a set is composed 834 | # of just strings that happen to be integers in radix 10 in the range 835 | # of 64 bit signed integers. 836 | # The following configuration setting sets the limit in the size of the 837 | # set in order to use this special memory saving encoding. 838 | set-max-intset-entries 512 839 | 840 | # Similarly to hashes and lists, sorted sets are also specially encoded in 841 | # order to save a lot of space. This encoding is only used when the length and 842 | # elements of a sorted set are below the following limits: 843 | zset-max-ziplist-entries 128 844 | zset-max-ziplist-value 64 845 | 846 | # HyperLogLog sparse representation bytes limit. The limit includes the 847 | # 16 bytes header. When an HyperLogLog using the sparse representation crosses 848 | # this limit, it is converted into the dense representation. 849 | # 850 | # A value greater than 16000 is totally useless, since at that point the 851 | # dense representation is more memory efficient. 852 | # 853 | # The suggested value is ~ 3000 in order to have the benefits of 854 | # the space efficient encoding without slowing down too much PFADD, 855 | # which is O(N) with the sparse encoding. The value can be raised to 856 | # ~ 10000 when CPU is not a concern, but space is, and the data set is 857 | # composed of many HyperLogLogs with cardinality in the 0 - 15000 range. 858 | hll-sparse-max-bytes 3000 859 | 860 | # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in 861 | # order to help rehashing the main Redis hash table (the one mapping top-level 862 | # keys to values). The hash table implementation Redis uses (see dict.c) 863 | # performs a lazy rehashing: the more operation you run into a hash table 864 | # that is rehashing, the more rehashing "steps" are performed, so if the 865 | # server is idle the rehashing is never complete and some more memory is used 866 | # by the hash table. 867 | # 868 | # The default is to use this millisecond 10 times every second in order to 869 | # actively rehash the main dictionaries, freeing memory when possible. 870 | # 871 | # If unsure: 872 | # use "activerehashing no" if you have hard latency requirements and it is 873 | # not a good thing in your environment that Redis can reply from time to time 874 | # to queries with 2 milliseconds delay. 875 | # 876 | # use "activerehashing yes" if you don't have such hard requirements but 877 | # want to free memory asap when possible. 878 | activerehashing yes 879 | 880 | # The client output buffer limits can be used to force disconnection of clients 881 | # that are not reading data from the server fast enough for some reason (a 882 | # common reason is that a Pub/Sub client can't consume messages as fast as the 883 | # publisher can produce them). 884 | # 885 | # The limit can be set differently for the three different classes of clients: 886 | # 887 | # normal -> normal clients including MONITOR clients 888 | # slave -> slave clients 889 | # pubsub -> clients subscribed to at least one pubsub channel or pattern 890 | # 891 | # The syntax of every client-output-buffer-limit directive is the following: 892 | # 893 | # client-output-buffer-limit 894 | # 895 | # A client is immediately disconnected once the hard limit is reached, or if 896 | # the soft limit is reached and remains reached for the specified number of 897 | # seconds (continuously). 898 | # So for instance if the hard limit is 32 megabytes and the soft limit is 899 | # 16 megabytes / 10 seconds, the client will get disconnected immediately 900 | # if the size of the output buffers reach 32 megabytes, but will also get 901 | # disconnected if the client reaches 16 megabytes and continuously overcomes 902 | # the limit for 10 seconds. 903 | # 904 | # By default normal clients are not limited because they don't receive data 905 | # without asking (in a push way), but just after a request, so only 906 | # asynchronous clients may create a scenario where data is requested faster 907 | # than it can read. 908 | # 909 | # Instead there is a default limit for pubsub and slave clients, since 910 | # subscribers and slaves receive data in a push fashion. 911 | # 912 | # Both the hard or the soft limit can be disabled by setting them to zero. 913 | client-output-buffer-limit normal 0 0 0 914 | client-output-buffer-limit slave 256mb 64mb 60 915 | client-output-buffer-limit pubsub 32mb 8mb 60 916 | 917 | # Redis calls an internal function to perform many background tasks, like 918 | # closing connections of clients in timeout, purging expired keys that are 919 | # never requested, and so forth. 920 | # 921 | # Not all tasks are performed with the same frequency, but Redis checks for 922 | # tasks to perform according to the specified "hz" value. 923 | # 924 | # By default "hz" is set to 10. Raising the value will use more CPU when 925 | # Redis is idle, but at the same time will make Redis more responsive when 926 | # there are many keys expiring at the same time, and timeouts may be 927 | # handled with more precision. 928 | # 929 | # The range is between 1 and 500, however a value over 100 is usually not 930 | # a good idea. Most users should use the default of 10 and raise this up to 931 | # 100 only in environments where very low latency is required. 932 | hz 10 933 | 934 | # When a child rewrites the AOF file, if the following option is enabled 935 | # the file will be fsync-ed every 32 MB of data generated. This is useful 936 | # in order to commit the file to the disk more incrementally and avoid 937 | # big latency spikes. 938 | aof-rewrite-incremental-fsync yes 939 | -------------------------------------------------------------------------------- /sentinel3/osx/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Example sentinel.conf 2 | 3 | # port 4 | # The port that this sentinel instance will run on 5 | port 26379 6 | 7 | # sentinel announce-ip 8 | # sentinel announce-port 9 | # 10 | # The above two configuration directives are useful in environments where, 11 | # because of NAT, Sentinel is reachable from outside via a non-local address. 12 | # 13 | # When announce-ip is provided, the Sentinel will claim the specified IP address 14 | # in HELLO messages used to gossip its presence, instead of auto-detecting the 15 | # local address as it usually does. 16 | # 17 | # Similarly when announce-port is provided and is valid and non-zero, Sentinel 18 | # will announce the specified TCP port. 19 | # 20 | # The two options don't need to be used together, if only announce-ip is 21 | # provided, the Sentinel will announce the specified IP and the server port 22 | # as specified by the "port" option. If only announce-port is provided, the 23 | # Sentinel will announce the auto-detected local IP and the specified port. 24 | # 25 | # Example: 26 | # 27 | # sentinel announce-ip 1.2.3.4 28 | 29 | # dir 30 | # Every long running process should have a well-defined working directory. 31 | # For Redis Sentinel to chdir to /tmp at startup is the simplest thing 32 | # for the process to don't interfere with administrative tasks such as 33 | # unmounting filesystems. 34 | dir /tmp 35 | 36 | # sentinel monitor 37 | # 38 | # Tells Sentinel to monitor this master, and to consider it in O_DOWN 39 | # (Objectively Down) state only if at least sentinels agree. 40 | # 41 | # Note that whatever is the ODOWN quorum, a Sentinel will require to 42 | # be elected by the majority of the known Sentinels in order to 43 | # start a failover, so no failover can be performed in minority. 44 | # 45 | # Slaves are auto-discovered, so you don't need to specify slaves in 46 | # any way. Sentinel itself will rewrite this configuration file adding 47 | # the slaves using additional configuration options. 48 | # Also note that the configuration file is rewritten when a 49 | # slave is promoted to master. 50 | # 51 | # Note: master name should not include special characters or spaces. 52 | # The valid charset is A-z 0-9 and the three characters ".-_". 53 | sentinel monitor mymaster 127.0.0.1 6379 2 54 | 55 | # sentinel auth-pass 56 | # 57 | # Set the password to use to authenticate with the master and slaves. 58 | # Useful if there is a password set in the Redis instances to monitor. 59 | # 60 | # Note that the master password is also used for slaves, so it is not 61 | # possible to set a different password in masters and slaves instances 62 | # if you want to be able to monitor these instances with Sentinel. 63 | # 64 | # However you can have Redis instances without the authentication enabled 65 | # mixed with Redis instances requiring the authentication (as long as the 66 | # password set is the same for all the instances requiring the password) as 67 | # the AUTH command will have no effect in Redis instances with authentication 68 | # switched off. 69 | # 70 | # Example: 71 | # 72 | # sentinel auth-pass mymaster MySUPER--secret-0123passw0rd 73 | 74 | # sentinel down-after-milliseconds 75 | # 76 | # Number of milliseconds the master (or any attached slave or sentinel) should 77 | # be unreachable (as in, not acceptable reply to PING, continuously, for the 78 | # specified period) in order to consider it in S_DOWN state (Subjectively 79 | # Down). 80 | # 81 | # Default is 30 seconds. 82 | sentinel down-after-milliseconds mymaster 30000 83 | 84 | # sentinel parallel-syncs 85 | # 86 | # How many slaves we can reconfigure to point to the new slave simultaneously 87 | # during the failover. Use a low number if you use the slaves to serve query 88 | # to avoid that all the slaves will be unreachable at about the same 89 | # time while performing the synchronization with the master. 90 | sentinel parallel-syncs mymaster 1 91 | 92 | # sentinel failover-timeout 93 | # 94 | # Specifies the failover timeout in milliseconds. It is used in many ways: 95 | # 96 | # - The time needed to re-start a failover after a previous failover was 97 | # already tried against the same master by a given Sentinel, is two 98 | # times the failover timeout. 99 | # 100 | # - The time needed for a slave replicating to a wrong master according 101 | # to a Sentinel current configuration, to be forced to replicate 102 | # with the right master, is exactly the failover timeout (counting since 103 | # the moment a Sentinel detected the misconfiguration). 104 | # 105 | # - The time needed to cancel a failover that is already in progress but 106 | # did not produced any configuration change (SLAVEOF NO ONE yet not 107 | # acknowledged by the promoted slave). 108 | # 109 | # - The maximum time a failover in progress waits for all the slaves to be 110 | # reconfigured as slaves of the new master. However even after this time 111 | # the slaves will be reconfigured by the Sentinels anyway, but not with 112 | # the exact parallel-syncs progression as specified. 113 | # 114 | # Default is 3 minutes. 115 | sentinel failover-timeout mymaster 180000 116 | 117 | # SCRIPTS EXECUTION 118 | # 119 | # sentinel notification-script and sentinel reconfig-script are used in order 120 | # to configure scripts that are called to notify the system administrator 121 | # or to reconfigure clients after a failover. The scripts are executed 122 | # with the following rules for error handling: 123 | # 124 | # If script exits with "1" the execution is retried later (up to a maximum 125 | # number of times currently set to 10). 126 | # 127 | # If script exits with "2" (or an higher value) the script execution is 128 | # not retried. 129 | # 130 | # If script terminates because it receives a signal the behavior is the same 131 | # as exit code 1. 132 | # 133 | # A script has a maximum running time of 60 seconds. After this limit is 134 | # reached the script is terminated with a SIGKILL and the execution retried. 135 | 136 | # NOTIFICATION SCRIPT 137 | # 138 | # sentinel notification-script 139 | # 140 | # Call the specified notification script for any sentinel event that is 141 | # generated in the WARNING level (for instance -sdown, -odown, and so forth). 142 | # This script should notify the system administrator via email, SMS, or any 143 | # other messaging system, that there is something wrong with the monitored 144 | # Redis systems. 145 | # 146 | # The script is called with just two arguments: the first is the event type 147 | # and the second the event description. 148 | # 149 | # The script must exist and be executable in order for sentinel to start if 150 | # this option is provided. 151 | # 152 | # Example: 153 | # 154 | # sentinel notification-script mymaster /var/redis/notify.sh 155 | 156 | # CLIENTS RECONFIGURATION SCRIPT 157 | # 158 | # sentinel client-reconfig-script 159 | # 160 | # When the master changed because of a failover a script can be called in 161 | # order to perform application-specific tasks to notify the clients that the 162 | # configuration has changed and the master is at a different address. 163 | # 164 | # The following arguments are passed to the script: 165 | # 166 | # 167 | # 168 | # is currently always "failover" 169 | # is either "leader" or "observer" 170 | # 171 | # The arguments from-ip, from-port, to-ip, to-port are used to communicate 172 | # the old address of the master and the new address of the elected slave 173 | # (now a master). 174 | # 175 | # This script should be resistant to multiple invocations. 176 | # 177 | # Example: 178 | # 179 | # sentinel client-reconfig-script mymaster /var/redis/reconfig.sh 180 | 181 | 182 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6380/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | include redis.conf 3 | 4 | port 6380 5 | dir ./server-6380/state 6 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6380/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | 3 | port 26380 4 | dir ./server-6380/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6380/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=../../bin/osx/redis-server 2 | redis_sentinel=../../bin/osx/redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6380/redis.conf & 6 | $redis_sentinel server-6380/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6380/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/osx/server-6380/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/osx/server-6380/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=../../bin/osx/redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26380 SHUTDOWN NOSAVE 5 | $redis_cli -p 6380 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6381/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | include redis.conf 3 | 4 | port 6381 5 | dir ./server-6381/state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6381/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | 3 | port 26381 4 | dir ./server-6381/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6381/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=../../bin/osx/redis-server 2 | redis_sentinel=../../bin/osx/redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6381/redis.conf & 6 | $redis_sentinel server-6381/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6381/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/osx/server-6381/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/osx/server-6381/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=../../bin/osx/redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26381 SHUTDOWN NOSAVE 5 | $redis_cli -p 6381 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6382/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | include redis.conf 3 | 4 | port 6382 5 | dir ./server-6382/state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6382/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to ./sentinel3/osx 2 | 3 | port 26382 4 | dir ./server-6382/state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6382/start.sh: -------------------------------------------------------------------------------- 1 | redis_server=../../bin/osx/redis-server 2 | redis_sentinel=../../bin/osx/redis-sentinel 3 | 4 | pushd .. 5 | $redis_server server-6382/redis.conf & 6 | $redis_sentinel server-6382/sentinel.conf & 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/osx/server-6382/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/osx/server-6382/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/osx/server-6382/stop.sh: -------------------------------------------------------------------------------- 1 | redis_cli=../../bin/osx/redis-cli 2 | 3 | pushd .. 4 | $redis_cli -p 26382 SHUTDOWN NOSAVE 5 | $redis_cli -p 6382 SHUTDOWN NOSAVE 6 | popd 7 | -------------------------------------------------------------------------------- /sentinel3/osx/start-all.sh: -------------------------------------------------------------------------------- 1 | redis_server=../../bin/osx/redis-server 2 | redis_sentinel=../../bin/osx/redis-sentinel 3 | redis_cli=../../bin/osx/redis-cli 4 | 5 | $redis_server server-6380/redis.conf & 6 | $redis_sentinel server-6380/sentinel.conf & 7 | 8 | $redis_server server-6381/redis.conf & 9 | $redis_sentinel server-6381/sentinel.conf & 10 | 11 | $redis_server server-6382/redis.conf & 12 | $redis_sentinel server-6382/sentinel.conf & 13 | 14 | read -n1 -r -p "Press any key to see sentinel info on masters and slaves..." 15 | 16 | $redis_cli -p 26380 sentinel master mymaster 17 | $redis_cli -p 26381 sentinel slaves mymaster 18 | -------------------------------------------------------------------------------- /sentinel3/osx/stop-all.sh: -------------------------------------------------------------------------------- 1 | redis_cli=../../bin/osx/redis-cli 2 | 3 | $redis_cli -p 26382 SHUTDOWN NOSAVE 4 | $redis_cli -p 26381 SHUTDOWN NOSAVE 5 | $redis_cli -p 26380 SHUTDOWN NOSAVE 6 | 7 | $redis_cli -p 6382 SHUTDOWN NOSAVE 8 | $redis_cli -p 6381 SHUTDOWN NOSAVE 9 | $redis_cli -p 6380 SHUTDOWN NOSAVE 10 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6380/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6380 5 | dir .\server-6380\state 6 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6380/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26380 4 | dir .\server-6380\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | sentinel auth-pass mymaster password 7 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6380/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6380/redis.conf 7 | start %redis_sentinel% server-6380/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6380/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows-password/server-6380/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6380/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26380 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6380 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6381/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6381 5 | dir .\server-6381\state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6381/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26381 4 | dir .\server-6381\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | sentinel auth-pass mymaster password 7 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6381/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6381/redis.conf 7 | start %redis_sentinel% server-6381/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6381/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows-password/server-6381/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6381/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26381 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6381 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6382/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6382 5 | dir .\server-6382\state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6382/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26382 4 | dir .\server-6382\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | sentinel auth-pass mymaster password 7 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6382/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6382/redis.conf 7 | start %redis_sentinel% server-6382/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6382/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows-password/server-6382/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows-password/server-6382/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26382 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6382 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows-password/start-all.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | SET redis_cli=..\..\bin\windows\redis-cli 5 | 6 | start %redis_server% server-6380\redis.conf 7 | start %redis_sentinel% server-6380\sentinel.conf --sentinel 8 | 9 | start %redis_server% server-6381\redis.conf 10 | start %redis_sentinel% server-6381\sentinel.conf --sentinel 11 | 12 | start %redis_server% server-6382\redis.conf 13 | start %redis_sentinel% server-6382\sentinel.conf --sentinel 14 | 15 | echo Press enter to see sentinel info on masters and slaves... 16 | pause 17 | 18 | %redis_cli% -p 26380 sentinel master mymaster 19 | %redis_cli% -p 26381 sentinel slaves mymaster 20 | 21 | echo Press enter again to close this window 22 | pause 23 | -------------------------------------------------------------------------------- /sentinel3/windows-password/stop-all.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | %redis_cli% -p 26382 SHUTDOWN NOSAVE 5 | %redis_cli% -p 26381 SHUTDOWN NOSAVE 6 | %redis_cli% -p 26380 SHUTDOWN NOSAVE 7 | 8 | %redis_cli% -p 6382 SHUTDOWN NOSAVE 9 | %redis_cli% -p 6381 SHUTDOWN NOSAVE 10 | %redis_cli% -p 6380 SHUTDOWN NOSAVE 11 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6380/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6380 5 | dir .\server-6380\state 6 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6380/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26380 4 | dir .\server-6380\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6380/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6380/redis.conf 7 | start %redis_sentinel% server-6380/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6380/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows/server-6380/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows/server-6380/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26380 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6380 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6381/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6381 5 | dir .\server-6381\state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6381/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26381 4 | dir .\server-6381\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6381/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6381/redis.conf 7 | start %redis_sentinel% server-6381/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6381/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows/server-6381/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows/server-6381/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26381 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6381 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6382/redis.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | include redis.windows.conf 3 | 4 | port 6382 5 | dir .\server-6382\state 6 | slaveof 127.0.0.1 6380 7 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6382/sentinel.conf: -------------------------------------------------------------------------------- 1 | # Relative to .\sentinel3\windows 2 | 3 | port 26382 4 | dir .\server-6382\state 5 | sentinel monitor mymaster 127.0.0.1 6380 2 6 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6382/start.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | 5 | pushd .. 6 | start %redis_server% server-6382/redis.conf 7 | start %redis_sentinel% server-6382/sentinel.conf --sentinel 8 | popd 9 | -------------------------------------------------------------------------------- /sentinel3/windows/server-6382/state/dump.rdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ServiceStack/redis-config/886bbc2fdf2a6c14b15a66752b4a45654d7c0f6f/sentinel3/windows/server-6382/state/dump.rdb -------------------------------------------------------------------------------- /sentinel3/windows/server-6382/stop.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | pushd .. 5 | %redis_cli% -p 26382 SHUTDOWN NOSAVE 6 | %redis_cli% -p 6382 SHUTDOWN NOSAVE 7 | popd 8 | -------------------------------------------------------------------------------- /sentinel3/windows/start-all.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_server=..\..\bin\windows\redis-server 3 | SET redis_sentinel=..\..\bin\windows\redis-server 4 | SET redis_cli=..\..\bin\windows\redis-cli 5 | 6 | start %redis_server% server-6380\redis.conf 7 | start %redis_sentinel% server-6380\sentinel.conf --sentinel 8 | 9 | start %redis_server% server-6381\redis.conf 10 | start %redis_sentinel% server-6381\sentinel.conf --sentinel 11 | 12 | start %redis_server% server-6382\redis.conf 13 | start %redis_sentinel% server-6382\sentinel.conf --sentinel 14 | 15 | echo Press enter to see sentinel info on masters and slaves... 16 | pause 17 | 18 | %redis_cli% -p 26380 sentinel master mymaster 19 | %redis_cli% -p 26381 sentinel slaves mymaster 20 | 21 | echo Press enter again to close this window 22 | pause 23 | -------------------------------------------------------------------------------- /sentinel3/windows/stop-all.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SET redis_cli=..\..\bin\windows\redis-cli 3 | 4 | %redis_cli% -p 26382 SHUTDOWN NOSAVE 5 | %redis_cli% -p 26381 SHUTDOWN NOSAVE 6 | %redis_cli% -p 26380 SHUTDOWN NOSAVE 7 | 8 | %redis_cli% -p 6382 SHUTDOWN NOSAVE 9 | %redis_cli% -p 6381 SHUTDOWN NOSAVE 10 | %redis_cli% -p 6380 SHUTDOWN NOSAVE 11 | --------------------------------------------------------------------------------