Redis Configuration
Redis configuration is flexible and powerful. This lesson covers the configuration file and common options.
Config File Location
Different installation methods place the config file in different locations:
| Installation Method | Config File Location |
|---|---|
| apt (Ubuntu) | /etc/redis/redis.conf |
| yum (CentOS) | /etc/redis.conf |
| Source | Source directory redis.conf, must copy manually |
| Homebrew (Mac) | /usr/local/etc/redis.conf |
| Windows | Install directory redis.windows.conf |
Creating Config File After Source Installation
BASH
# Create config directory
sudo mkdir -p /etc/redis
# Copy config file
sudo cp /tmp/redis-7.0.11/redis.conf /etc/redis/redis.conf
# Create data directory
sudo mkdir -p /var/lib/redis
sudo chown redis:redis /var/lib/redis
Config File Format
Redis config files use a simple key-value format:
CONF
# This is a comment
# Basic format
config-key value
# Example
port 6379
bind 127.0.0.1
daemonize yes
💡 Note: Config keys and values are separated by a space — no equals sign needed.
Core Config Options
Network Configuration
CONF
# Bind IP address
# 127.0.0.1 — local access only
# 0.0.0.0 — allow all IPs (dangerous!)
# 192.168.1.100 — bind to a specific IP
bind 127.0.0.1
# Listen port
port 6379
# Protected mode (recommended to keep on)
# yes: only allow local connections unless bind or password is set
# no: allow remote connections
protected-mode yes
# TCP connection backlog size
tcp-backlog 511
# Client idle timeout in seconds (0 means never disconnect)
timeout 0
# TCP keepalive interval in seconds
tcp-keepalive 300
⚠️ Security warning:
bind 0.0.0.0 allows access from all IPs — you must set a password!
General Configuration
CONF
# Run as daemon (background)
daemonize no
# PID file location
pidfile /var/run/redis/redis-server.pid
# Log level
# debug: lots of debug info
# verbose: lots of useful info
# notice: moderately verbose (recommended for production)
# warning: only important messages
loglevel notice
# Log file location
# Empty string means output to stdout
logfile /var/log/redis/redis-server.log
# Number of databases (default 16, numbered 0-15)
databases 16
Memory Management
CONF
# Maximum memory usage
# Format: 1kb, 5mb, 2gb, etc.
# 0 means unlimited (dangerous!)
maxmemory 256mb
# Eviction policy when memory limit is reached
# volatile-lru: evict keys with TTL set (LRU algorithm)
# allkeys-lru: evict any key (LRU algorithm)
# volatile-lfu: evict keys with TTL set (LFU algorithm)
# allkeys-lfu: evict any key (LFU algorithm)
# volatile-random: randomly evict keys with TTL set
# allkeys-random: randomly evict any key
# volatile-ttl: evict keys with the shortest TTL
# noeviction: don't evict, return error (default)
maxmemory-policy allkeys-lru
# LRU/LFU sample size
# Higher values are more accurate but use more CPU
maxmemory-samples 5
💡 How to choose an eviction policy?
- Caching scenarios:
allkeys-lruorallkeys-lfu - Persistence scenarios:
noevictionorvolatile-lru
Persistence Configuration (RDB)
CONF
# RDB snapshot trigger conditions
# save <seconds> <changes>
# At least 1 change in 900 seconds → trigger snapshot
save 900 1
save 300 10
save 60 10000
# Disable RDB (comment out save or set to empty)
# save ""
# RDB file name
dbfilename dump.rdb
# RDB file storage directory
dir /var/lib/redis
# RDB compression (recommended to keep on)
rdbcompression yes
# RDB checksum (recommended to keep on)
rdbchecksum yes
Persistence Configuration (AOF)
CONF
# Enable AOF
appendonly no
# AOF file name
appendfilename "appendonly.aof"
# AOF sync strategy
# always: sync on every write (safest, slowest)
# everysec: sync once per second (recommended)
# no: let the OS decide (fastest, least safe)
appendfsync everysec
# Disable fsync during AOF rewrite
no-appendfsync-on-rewrite no
# AOF file size triggers rewrite
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
💡 RDB vs AOF:
- RDB: snapshot, small files, fast recovery, but may lose data
- AOF: log, safer data, but larger files, slower recovery
- Recommendation: enable both RDB and AOF
Security Configuration
CONF
# Set password (before Redis 6.0)
requirepass yourpassword
# Rename dangerous commands
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
⚠️ Note: Redis 6.0+ recommends using ACL for more flexible and secure access control.
Limits Configuration
CONF
# Maximum number of client connections
# 10000 means up to 10000 clients
maxclients 10000
# Maximum input buffer
client-query-buffer-limit 1gb
# Maximum output buffer
# normal: regular clients
# replica: replica nodes
# pubsub: pub/sub clients
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
Using the CONFIG Command
You can view and modify configuration at runtime.
View Configuration
REDIS
# View all config
CONFIG GET *
# Returns alternating list of config keys and values
# View specific config
CONFIG GET port
1) "port"
2) "6379"
CONFIG GET maxmemory
1) "maxmemory"
2) "0"
# View multiple configs (using wildcard)
CONFIG GET maxmemory*
1) "maxmemory"
2) "0"
3) "maxmemory-policy"
4) "noeviction"
5) "maxmemory-samples"
6) "5"
Modify Configuration
REDIS
# Set max memory
CONFIG SET maxmemory 256mb
OK
# Set log level
CONFIG SET loglevel "debug"
OK
# Set number of databases
CONFIG SET databases 32
OK
⚠️ Note: Changes made with CONFIG SET take effect immediately but are lost on restart. Use CONFIG REWRITE to save to the config file.
Save Configuration to File
REDIS
# Write current config to the config file
CONFIG REWRITE
OK
CONFIG REWRITE will:
- Read the original config file
- Overwrite with current runtime config
- Preserve comments and formatting
Reset Configuration
REDIS
# Reset statistics
CONFIG RESETSTAT
OK
Common Configuration Scenarios
Scenario 1: Development Environment
CONF
bind 127.0.0.1
port 6379
daemonize no
logfile ""
databases 16
save ""
appendonly no
Scenario 2: Production Environment
CONF
bind 127.0.0.1
port 6379
daemonize yes
logfile /var/log/redis/redis.log
databases 16
# Memory management
maxmemory 2gb
maxmemory-policy allkeys-lru
# Persistence
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
# Security
requirepass your_strong_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""
Scenario 3: Cache Server Configuration
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 4gb
maxmemory-policy allkeys-lru
# No persistence needed for caching
save ""
appendonly no
Scenario 4: Message Queue Configuration
CONF
bind 127.0.0.1
port 6379
daemonize yes
maxmemory 1gb
maxmemory-policy noeviction
# Message queues need persistence
appendonly yes
appendfsync everysec
Using Command-Line Arguments
You can override config values when starting Redis:
BASH
# Override a single config
redis-server --port 6380
redis-server --maxmemory 512mb
redis-server --requirepass mypassword
# Override multiple configs
redis-server --port 6380 --maxmemory 512mb --daemonize yes
# Use config file + override some settings
redis-server /etc/redis/redis.conf --port 6380
Dynamic Configuration Adjustment
Adjusting Memory Limits
REDIS
# Check current memory usage
INFO memory
used_memory:1048576
used_memory_human:1.00M
# Adjust max memory
CONFIG SET maxmemory 512mb
OK
# Save config
CONFIG REWRITE
OK
Adjusting Log Level
REDIS
# Temporarily enable debug logging
CONFIG SET loglevel debug
OK
# Restore after debugging
CONFIG SET loglevel notice
OK
Adjusting Slow Query Log
REDIS
# Set slow query threshold (microseconds)
CONFIG SET slowlog-log-slower-than 10000
OK
# Set max slow query log entries
CONFIG SET slowlog-max-len 128
OK
# View slow query log
SLOWLOG GET 10
Configuration Verification
Check Config File Syntax
BASH
# Check at startup
redis-server /etc/redis/redis.conf --test-memory 100
View Running Configuration
BASH
# View from command line
redis-cli CONFIG GET maxmemory
# View all config
redis-cli CONFIG GET *
❓ FAQ
Q Do I need to restart Redis after changing configuration?
A Config changes via CONFIG SET take effect immediately without restart. However, they are lost on restart — use CONFIG REWRITE to persist them.
Q How do I view Redis default configuration?
A The
redis.conf file in the Redis source distribution has detailed default config with explanations.Q What happens if maxmemory is set to 0?
A 0 means unlimited memory. Redis will use as much memory as available, which may lead to OOM and the system killing the process.
Q How do I disable dangerous commands?
A Use
rename-command FLUSHALL "" in the config file to rename a command to an empty string.Q Can a config file include other config files?
A Yes, use
include /path/to/other.conf.📖 Summary
- Config file location varies by installation method; source installs need manual copying
- Core config areas: network, memory, persistence, security
- CONFIG GET/SET views and modifies runtime config
- CONFIG REWRITE saves config to file
- Different scenarios need different config strategies
- Always set passwords and memory limits in production
📝 Exercises
- View config: Use CONFIG GET to check your Redis config, find the values of maxmemory and maxmemory-policy
- Modify config: Use CONFIG SET to change maxmemory to 128mb, then save with CONFIG REWRITE
- Scenario config: Write a Redis config file for a caching scenario
- Disable commands: Disable the FLUSHALL and FLUSHDB commands in the config file
Next Lesson
In the next lesson, we will learn Redis Data Types Overview, covering the 5 basic data types in Redis.



