9.6 KiB
Server Administration
Table of Contents
- ACL Management
- Client Management
- Configuration
- Replication Acknowledgment
- Persistence
- Replication
- Server Lifecycle
ACL Management
Redis ACL (Access Control List) controls which clients can execute which commands and access which keys. Available since Redis 6.0.
User Management
# Create/modify user with rules
redis-cli ACL SETUSER username [rule ...]
# Delete user
redis-cli ACL DELUSER username [username ...]
# List all users
redis-cli ACL LIST
# Get detailed user info
redis-cli ACL GETUSER username
# Show current authenticated user
redis-cli ACL WHOAMI
ACL Rules
Rules are applied left-to-right and cumulative (unless using reset):
# Enable/disable user
on # Enable user
off # Disable user (default for new users)
reset # Remove all rules (clean slate)
# Password
>password # Add password (SHA256 hash stored)
<password # Remove password
#password # Add SHA256 hash directly
# Command permissions
+command # Allow specific command
-command # Deny specific command
+@category # Allow command category (e.g., +@string, +@read)
-@category # Deny command category
+@all # Allow all commands
-@all # Deny all commands (default)
+|command # Allow command with subcommand (e.g., +|config|get)
# Key permissions
~pattern # Allow key pattern (~* = all keys, default: nothing)
%R~pattern # Read permission on pattern
%W~pattern # Write permission on pattern
~RW~pattern # Read+Write permission (same as ~pattern)
allkeys # Alias for ~*
# Pub/Sub channel permissions (Redis 6.2+)
&pattern # Allow channel pattern
allchannels # Allow all channels
# Selectors (Redis 7.0+) — independent permission sets
(+command ~pattern) # Additional permission scope
ACL SETUSER Examples
# Create admin user
redis-cli ACL SETUSER admin on >strongpassword ~* +@all
# Create read-only user
redis-cli ACL SETUSER readonly on >password ~* +@read -@all
# Create user with limited key access
redis-cli ACL SETUSER app1 on >password ~app1:* +@read +@string +@hash -@all
# Reset user completely and redefine
redis-cli ACL SETUSER myuser reset on >newpass ~cache:* +@read +get +set
# User with selectors (Redis 7.0+)
redis-cli ACL SETUSER multi on +GET allkeys (+SET ~app1:*)
ACL Maintenance
# Dry-run: check if user can execute command
redis-cli ACL DRYRUN username command [arg ...]
# Generate random password
redis-cli ACL GENPASS [bits] # Default 256 bits
# Save ACLs to config file
redis-cli ACL SAVE
# Load ACLs from config file
redis-cli ACL LOAD
# View ACL audit log
redis-cli ACL LOG [count]
redis-cli ACL LOG RESET # Clear log
# List command categories
redis-cli ACL CAT [category] # Without arg: list categories
Client Management
Client Information
# List all connected clients
redis-cli CLIENT LIST [TYPE normal|master|replica|pubsub] [ID id [id ...]]
# Get info about current connection
redis-cli CLIENT INFO
# Get current client ID
redis-cli CLIENT ID
# Get client name
redis-cli CLIENT GETNAME
CLIENT LIST output fields include: id, addr, laddr, fd, name, age, idle, flags, db, sub, psub, ssub, multi, qbuf, qbuf-free, argv-mem, multi-mem, obl, oll, omem, tot-mem, cmds, redir, user, resp, lib-name, lib-ver, watch, io-thread.
Client Control
# Set client name (for identification in CLIENT LIST)
redis-cli CLIENT SETNAME my-app-worker
# Disconnect client
redis-cli CLIENT KILL ADDR ip:port
redis-cli CLIENT KILL ID client-id
redis-cli CLIENT KILL TYPE normal|master|replica|pubsub
redis-cli CLIENT KILL USER username
redis-cli CLIENT KILL SKIPME yes|no # Skip current connection
redis-cli CLIENT KILL LADDR ip:port # Kill by local address
redis-cli CLIENT KILL MAXAGE max-age # Kill connections older than max-age seconds
# Pause/unpause all clients
redis-cli CLIENT PAUSE timeout [WRITE|ALL] # Milliseconds
redis-cli CLIENT UNPAUSE
# Unblock a client blocked on blocking command
redis-cli CLIENT UNBLOCK client-id [TIMEOUT|ERROR]
Client Tracking (Server-assisted Client Caching, Redis 6.0+)
# Enable tracking
redis-cli CLIENT TRACKING ON [REDIRECT client-id] [PREFIX prefix [prefix ...]] [BCAST] [OPTIN] [OPTOUT] [NOLOOP]
# Disable tracking
redis-cli CLIENT TRACKING OFF
# Get tracking info
redis-cli CLIENT TRACKINGINFO
# Opt-in/out caching control
redis-cli CLIENT CACHING YES|NO
Client Settings
# Set client info metadata
redis-cli CLIENT SETINFO LIB-NAME my-client
redis-cli CLIENT SETINFO LIB-VER 1.0.0
# No-touch mode (skip key last-access-time update)
redis-cli CLIENT NO-TOUCH ON|OFF
# No-evict mode (reject eviction during client operations)
redis-cli CLIENT NO-EVICT ON|OFF
Configuration
Reading Configuration
# Get specific parameter
redis-cli CONFIG GET maxmemory
# Get with glob patterns (Redis 7.0+ supports multiple)
redis-cli CONFIG GET *max*
redis-cli CONFIG GET maxmemory *timeout*
# Get all configuration
redis-cli CONFIG GET '*'
Modifying Configuration
# Set parameter at runtime
redis-cli CONFIG SET maxmemory 100mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG SET timeout 300
# Set multiple parameters in one call (Redis 7.0+)
redis-cli CONFIG SET maxmemory 100mb maxmemory-policy allkeys-lru
# Write current config to redis.conf
redis-cli CONFIG REWRITE
Common runtime parameters:
maxmemory # Max memory (e.g., 100mb, 1gb, 0 = unlimited)
maxmemory-policy # Eviction: allkeys-lru, volatile-lru, allkeys-lfu, etc.
timeout # Client idle timeout (seconds, 0 = disabled)
save # RDB save schedule (e.g., "900 1 300 10 60 10000")
appendonly # AOF persistence: yes|no
appendfsync # AOF sync: always|everysec|no
notify-keyspace-events # Keyspace notifications (e.g., "Ex" for expired events)
Reset Statistics
redis-cli CONFIG RESETSTAT # Reset INFO statistics counters
Replication Acknowledgment
WAIT
Block until write commands are confirmed by the specified number of replicas.
# Wait for 2 replicas to confirm, up to 5 seconds
redis-cli SET mykey myvalue
redis-cli WAIT 2 5000
# Returns: number of replicas that confirmed (integer)
# Fire and forget (don't wait)
redis-cli WAIT 0 0
Useful for ensuring data durability across replicas before proceeding. The count reflects replicas that acknowledged writes up to the moment WAIT was issued.
WAITAOF (Redis 7.2+)
Block until writes are confirmed as fsynced to AOF on local and/or replica nodes.
# Wait for local fsync + 1 replica AOF confirmation, up to 5 seconds
redis-cli WAITAOF 1 1 5000
# Returns: local:aof_fsynced, replicated:aof_fsynced_count
Parameters:
numlocal— required local AOF fsync count (0 = don't wait for local)numreplicas— required replica AOF fsync count (0 = don't wait for replicas)timeout— milliseconds (0 = wait forever)
Persistence
RDB Snapshots
# Background save (non-blocking, forks a child process)
redis-cli BGSAVE
# Background saving started
# Synchronous save (blocks the server — avoid in production)
redis-cli SAVE
# Check last save time
redis-cli LASTSAVE
# (integer) 1735689600
# Check save progress
redis-cli INFO persistence | grep rdb_last_save_time
AOF Persistence
# Rewrite AOF in background (compact the append-only file)
redis-cli BGREWRITEAOF
# Background append only file rewriting started
# Check AOF status
redis-cli INFO persistence | grep aof_enabled
# Force AOF rewrite via config
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG SET appendfsync everysec # always|everysec|no
Persistence Configuration
# RDB save schedule: save after N seconds if at least M keys changed
redis-cli CONFIG GET save
redis-cli CONFIG SET save "900 1 300 10 60 10000"
# AOF settings
redis-cli CONFIG GET appendonly
redis-cli CONFIG GET appendfsync
redis-cli CONFIG GET auto-aof-rewrite-percentage
Replication
Configure Replication
# Make current instance a replica of another Redis
redis-cli REPLICAOF host port
# OK
# Promote replica back to master
redis-cli REPLICAOF NO ONE
# OK
# Check replication status
redis-cli INFO replication
redis-cli ROLE
Replication Info
redis-cli INFO replication | grep -E "role|connected_slaves|master_repl_offset"
Server Lifecycle
Shutdown
# Save and shutdown (blocks until complete)
redis-cli SHUTDOWN NOSAVE|SAVE
# Shutdown with save (default if not specified)
redis-cli SHUTDOWN SAVE
# Shutdown without saving
redis-cli SHUTDOWN NOSAVE
# Check if server is responding
redis-cli PING
Failover (Redis 7.0+)
# Coordinated failover via sentinel-like mechanism
redis-cli FAILOVER [TO host port [FORCE]] [ABORT] [TIMEOUT milliseconds]