4.3 KiB
4.3 KiB
Redis Cheatsheet
Memory & Diagnostics
# Overall memory stats
redis-cli INFO memory
# Human-readable used memory
redis-cli INFO memory | grep used_memory_human
# Total number of keys
redis-cli DBSIZE
# Memory usage of a specific key (in bytes)
redis-cli MEMORY USAGE "some:key"
# Find biggest keys per type (safe, non-blocking)
redis-cli --bigkeys
# Top 30 keys by memory usage (scans first 500 keys)
redis-cli --scan --pattern "*" | head -500 | while read key; do
bytes=$(redis-cli MEMORY USAGE "$key" 2>/dev/null)
echo "$bytes $key"
done | sort -rn | head -30
# Full scan (slow on large datasets)
redis-cli --scan | while read key; do
bytes=$(redis-cli MEMORY USAGE "$key" 2>/dev/null)
echo "$bytes $key"
done | sort -rn | head -50
# Memory doctor -- quick health check
redis-cli MEMORY DOCTOR
Key Inspection
# Count keys matching a pattern
redis-cli --scan --pattern "cache:*" | wc -l
redis-cli --scan --pattern "horizon:*" | wc -l
redis-cli --scan --pattern "queues:*" | wc -l
# Check key type
redis-cli TYPE "some:key"
# Check TTL (-1 = no expiry, -2 = key doesn't exist)
redis-cli TTL "some:key"
# Find keys with no expiry (sample first 100)
redis-cli --scan --pattern "*" | head -100 | while read key; do
ttl=$(redis-cli TTL "$key")
if [ "$ttl" = "-1" ]; then echo "NO EXPIRY: $key ($(redis-cli MEMORY USAGE "$key") bytes)"; fi
done
# List all key prefixes and their counts
redis-cli --scan | sed 's/:[^:]*$//' | sort | uniq -c | sort -rn | head -30
Streams
# Stream length
redis-cli XLEN "stream:key"
# Stream info (memory, first/last entry, etc.)
redis-cli XINFO STREAM "stream:key"
# Trim stream to max N entries
redis-cli XTRIM "stream:key" MAXLEN 10000
# Delete a stream entirely
redis-cli DEL "stream:key"
# Read last 5 entries
redis-cli XREVRANGE "stream:key" + - COUNT 5
Hashes, Lists, Sets, Sorted Sets
# Hash: field count and sample fields
redis-cli HLEN "hash:key"
redis-cli HSCAN "hash:key" 0 COUNT 10
# List: length and sample
redis-cli LLEN "list:key"
redis-cli LRANGE "list:key" 0 9
# Set: member count and sample
redis-cli SCARD "set:key"
redis-cli SSCAN "set:key" 0 COUNT 10
# Sorted set: member count and top 10 by score
redis-cli ZCARD "zset:key"
redis-cli ZREVRANGE "zset:key" 0 9 WITHSCORES
Memory Limits & Eviction
# Set memory limit (runtime, no restart)
redis-cli CONFIG SET maxmemory 2gb
# Set eviction policy
redis-cli CONFIG SET maxmemory-policy volatile-lru
# Persist config changes to redis.conf
redis-cli CONFIG REWRITE
# Check current settings
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET maxmemory-policy
redis-cli CONFIG GET save
Eviction policies
| Policy | Behavior |
|---|---|
noeviction |
Refuse writes when full (default -- dangerous) |
volatile-lru |
Evict LRU keys that have a TTL set |
allkeys-lru |
Evict any LRU key |
volatile-ttl |
Evict keys with shortest TTL first |
volatile-random |
Evict random keys that have a TTL |
allkeys-random |
Evict any random key |
Persistence
# Disable RDB snapshots (prevents fork that doubles memory)
redis-cli CONFIG SET save ""
# Trigger manual save (blocks until done)
redis-cli SAVE
# Trigger background save (forks -- dangerous if low memory)
redis-cli BGSAVE
# Check last save time
redis-cli LASTSAVE
# Check if background save is in progress
redis-cli INFO persistence | grep rdb_bgsave_in_progress
Bulk Operations
# Delete all keys matching a pattern (use with care)
redis-cli --scan --pattern "prefix:*" | xargs -L 100 redis-cli DEL
# Count + size of keys matching a pattern
redis-cli --scan --pattern "horizon:*" | while read key; do
redis-cli MEMORY USAGE "$key"
done | awk '{s+=$1} END {printf "Total: %.2f MB\n", s/1024/1024}'
# Flush current database (DESTRUCTIVE)
redis-cli FLUSHDB
# Flush all databases (DESTRUCTIVE)
redis-cli FLUSHALL
Monitoring
# Watch commands in real time (Ctrl+C to stop)
redis-cli MONITOR
# Slow log -- queries that took longer than threshold
redis-cli SLOWLOG GET 10
# Connected clients
redis-cli INFO clients | grep connected_clients
# Stats since startup
redis-cli INFO stats
Config File Locations
/etc/redis/redis.conf # Debian/Ubuntu default
/etc/redis.conf # RHEL/CentOS
/etc/redis/6379.conf # Multi-instance setups