8.4 KiB
Connection and CLI Options
Table of Contents
- Connection Methods
- CLI Flags Reference
- Environment Variables
- SSL/TLS Configuration
- Interactive Mode
- String Quoting and Escaping
Connection Methods
Basic Connection
By default, redis-cli connects to 127.0.0.1:6379 with no password.
# Default connection
redis-cli
# Custom host and port
redis-cli -h redis15.localnet.org -p 6390 PING
# Password authentication
redis-cli -a myUnguessablePazzzzzword123 PING
# ACL-style authentication (Redis 6+)
redis-cli --user admin --pass myPassword PING
# Specific database number
redis-cli -n 2 DBSIZE
URI Connection
# Full URI format
redis-cli -u redis://user:password@host:port/dbnum PING
# Without username (use "default")
redis-cli -u redis://default:password@localhost:6379/0 PING
# TLS scheme
redis-cli -u rediss://default:password@redis.example.com:6380/0 PING
# Minimal URI
redis-cli -u redis://localhost:6379 PING
User, password, and dbnum are optional in the URI. For TLS, use the rediss:// scheme.
IPv4/IPv6 Preference
redis-cli -4 PING # Prefer IPv4
redis-cli -6 PING # Prefer IPv6
CLI Flags Reference
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
Connection:
-h <hostname> Server hostname (default: 127.0.0.1)
-p <port> Server port (default: 6379)
-t <timeout> Connection timeout in seconds (decimals allowed, default: 0 = no limit)
-s <socket> Unix socket (overrides hostname and port)
-a <password> Password (also via REDISCLI_AUTH env var)
--user <username> ACL username (requires -a)
--pass <password> Alias of -a
--askpass Prompt for password from STDIN (ignores -a and REDISCLI_AUTH)
-u <uri> Connection URI: redis://user:password@host:port/dbnum
-n <db> Database number
Protocol:
-2 Start in RESP2 protocol mode
-3 Start in RESP3 protocol mode
Execution:
-r <repeat> Execute command N times (-1 for infinite)
-i <interval> Seconds between repeated commands (supports decimals like 0.1)
Also used in --scan, --stat, --bigkeys, --memkeys, --keystats
-x Read last argument from STDIN
-X <tag> Read tagged argument from STDIN
Output:
--raw Raw output (no type prefixes, default when not TTY)
--no-raw Force human-readable output even when piping
--csv CSV output format
--json JSON output (default RESP3, use -2 for RESP2)
--quoted-json JSON with ASCII-safe quoted strings
-d <delimiter> Delimiter between response bulks in raw mode (default: \n)
-D <delimiter> Delimiter between responses in raw mode (default: \n)
Cluster:
-c Enable cluster mode (follow -ASK and -MOVED redirections)
Behavior:
-e Return non-zero exit code on command failure
--verbose Verbose output
--no-auth-warning Suppress password-on-CLI warning
--quoted-input Force input handling as quoted strings
--show-pushes <yn> Print RESP3 PUSH messages (default: yes in TTY)
Special Modes:
--stat Continuous server stats
--latency Continuous latency sampling
--latency-history Latency tracking over time (15s windows, change with -i)
--latency-dist Latency spectrum visualization (requires xterm 256 colors)
--lru-test <keys> Simulate LRU cache workload
--replica Simulate replica, show commands from master
--rdb <filename> Transfer RDB dump from remote server
--functions-rdb <filename> RDB dump with functions only
--pipe Transfer raw Redis protocol from stdin
--pipe-timeout <n> Pipe mode timeout in seconds (default: 30, 0 = forever)
--bigkeys Scan for keys with many elements
--memkeys Scan for keys consuming memory
--memkeys-samples <n> Memory sampling count
--keystats Combined bigkeys + memkeys with distribution
--keystats-samples <n> Key stats sampling count
--hotkeys Find hot keys (requires *lfu maxmemory-policy)
--scan List keys using SCAN
--pattern <pat> Pattern for --scan, --bigkeys, --memkeys, --keystats, --hotkeys
--quoted-pattern <pat> Same as --pattern, but accepts quoted binary-safe strings
--count <count> COUNT hint for scan operations
--cursor <n> Start scan at cursor (after Ctrl-C)
--top <n> Display top N key sizes (default: 10, with --keystats)
--intrinsic-latency <sec> Measure system baseline latency
--eval <file> Execute Lua script
--ldb Enable Lua debugger with --eval
--ldb-sync-mode Synchronous Lua debugger (blocks server)
--cluster <cmd> Cluster management command
Examples:
redis-cli -u redis://default:PASSWORD@localhost:6379/0
cat /etc/passwd | redis-cli -x set mypasswd
redis-cli -D "" --raw dump key > key.dump && redis-cli -X dump_tag restore key2 0 dump_tag replace < key.dump
redis-cli -r 100 lpush mylist x
redis-cli -r 100 -i 1 info | grep used_memory_human:
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3
Environment Variables
| Variable | Purpose |
|---|---|
REDISCLI_AUTH |
Password for authentication (preferred over -a flag) |
REDISCLI_HISTFILE |
Custom history file path (default: ~/.rediscli_history, set to /dev/null to disable) |
REDISCLI_RCFILE |
Custom preferences file path (default: ~/.redisclirc) |
HOME |
Base directory for .rediscli_history and .redisclirc |
Security tip: Always prefer REDISCLI_AUTH over -a <password>. The -a flag exposes the password in shell history and process listings (ps aux).
SSL/TLS Configuration
# Enable TLS with trusted CA
redis-cli --tls --cacert /path/to/ca.crt -h redis.example.com PING
# CA certificate directory
redis-cli --tls --cacertdir /etc/ssl/certs -h redis.example.com PING
# Client certificate authentication (mutual TLS)
redis-cli --tls --cacert /path/to/ca.crt \
--cert /path/to/client.crt \
--key /path/to/client.key \
-h redis.example.com PING
Interactive Mode
Startup
Run redis-cli without arguments to enter interactive mode:
$ redis-cli
127.0.0.1:6379> PING
PONG
The prompt shows host:port[db_number] and updates when you switch databases or connect to a different server.
Connection Management
CONNECT <host> <port> # Connect to different instance
SELECT <db> # Switch database (prompt updates to show db number)
QUIT # Exit redis-cli
On disconnection, redis-cli automatically attempts to reconnect. It re-selects the last database but loses other state (e.g., MULTI/EXEC transactions).
Editing and History
- Line editing: Built-in linenoise library — no external dependencies
- History: Arrow keys (up/down) access previous commands. Stored in
~/.rediscli_history - Tab completion: Press TAB to complete command names
- Syntax hints: Shown after entering a command name (toggle with
:set hints/:set nohints) - Reverse search:
Ctrl+Rfor history search
Preferences
Set via :set command in interactive mode or in ~/.redisclirc:
:set hints # Enable syntax hints
:set nohints # Disable syntax hints
Help System
HELP @<category> # Show all commands in a category
HELP <command> # Show help for a specific command
# Available categories:
# @generic, @string, @list, @set, @sorted_set, @hash,
# @pubsub, @transactions, @connection, @server, @scripting,
# @hyperloglog, @cluster, @geo, @stream
Screen Control
CLEAR # Clear terminal screen
Repeating Commands
Prefix any command with a number to repeat it:
5 INCR mycounter # Execute INCR mycounter 5 times
String Quoting and Escaping
When a string value contains whitespace or non-printable characters, use quoting:
Double-quoted strings support escape sequences:
\"\\\n\r\t\b\a\xhh(hex)
Single-quoted strings are literal, only escaping:
\'\\
SET mykey "Hello\nWorld" # Two lines: Hello / World
GET mykey
# Hello
# World
AUTH user ">^8T>6Na{u|jp>+v\"55\@_" # Escaped quotes in password
When the output target is not a terminal, redis-cli automatically uses raw output mode (no type prefixes like (integer)). Force with --raw or --no-raw.