| name | redis-ops |
| description | Operate Redis with redis-cli: key patterns, pub/sub, Lua scripting, memory analysis, cluster operations. Trigger: when using Redis, redis-cli, Redis keys, pub/sub messaging, Redis scripting, Redis cluster, Redis memory, KEYS pattern, SCAN, Redis streams |
| version | 1 |
| argument-hint | [cli|monitor|info|cluster] [command] [args] |
| allowed-tools | ["bash","read","write","grep","glob"] |
Redis Operations
You are now operating in Redis management and operations mode.
Installation and Connection
brew install redis
redis-server
redis-server /usr/local/etc/redis.conf
redis-server --daemonize yes
redis-cli
redis-cli -h redis.example.com -p 6379
redis-cli -h redis.example.com -p 6379 -a mypassword
redis-cli --tls -h redis.example.com -p 6380
redis-cli ping
redis-cli info server | grep redis_version
Basic Key Operations
redis-cli SET mykey "hello world"
redis-cli SET mykey "hello" EX 3600
redis-cli SET mykey "hello" PX 60000
redis-cli SET mykey "hello" NX
redis-cli SET mykey "hello" XX
redis-cli GET mykey
redis-cli EXISTS mykey
redis-cli DEL mykey
redis-cli DEL key1 key2 key3
redis-cli TTL mykey
redis-cli PTTL mykey
redis-cli EXPIRE mykey 3600
redis-cli EXPIREAT mykey 1735689600
redis-cli PERSIST mykey
redis-cli RENAME oldkey newkey
redis-cli RENAMENX oldkey newkey
redis-cli TYPE mykey
redis-cli GETSET mykey "newvalue"
redis-cli GETDEL mykey
Key Patterns and SCAN
redis-cli SCAN 0
redis-cli SCAN 0 MATCH "user:*"
redis-cli SCAN 0 MATCH "session:*" COUNT 100
cursor=0
while true; do
result=$(redis-cli SCAN $cursor MATCH "user:*" COUNT 100)
cursor=$(echo "$result" | head -1)
keys=$(echo "$result" | tail -n +2)
if [ -n "$keys" ]; then
echo "$keys"
fi
if [ "$cursor" = "0" ]; then break; fi
done
redis-cli --scan --pattern "user:*" | wc -l
redis-cli --scan --pattern "*" | while read key; do
type=$(redis-cli TYPE "$key")
if [ "$type" = "hash" ]; then
echo "$key"
fi
done
redis-cli --scan --pattern "session:*" | xargs redis-cli DEL
redis-cli HSCAN myhash 0 MATCH "field*" COUNT 50
redis-cli SSCAN myset 0 COUNT 100
redis-cli ZSCAN myzset 0 MATCH "*" COUNT 100
Data Structures
redis-cli INCR counter
redis-cli INCRBY counter 10
redis-cli DECR counter
redis-cli APPEND mykey " world"
redis-cli HSET user:1 name "Alice" email "alice@example.com" age 30
redis-cli HGET user:1 name
redis-cli HGETALL user:1
redis-cli HMSET user:2 name "Bob" email "bob@example.com"
redis-cli HMGET user:1 name email
redis-cli HDEL user:1 age
redis-cli HEXISTS user:1 name
redis-cli HLEN user:1
redis-cli HKEYS user:1
redis-cli HVALS user:1
redis-cli LPUSH mylist a b c
redis-cli RPUSH mylist d e f
redis-cli LPOP mylist
redis-cli RPOP mylist
redis-cli LRANGE mylist 0 -1
redis-cli LRANGE mylist 0 9
redis-cli LLEN mylist
redis-cli LINDEX mylist 0
redis-cli LINSERT mylist BEFORE "b" "x"
redis-cli BLPOP mylist 5
redis-cli SADD myset a b c d
redis-cli SREM myset a
redis-cli SISMEMBER myset b
redis-cli SMEMBERS myset
redis-cli SCARD myset
redis-cli SUNION set1 set2
redis-cli SINTER set1 set2
redis-cli SDIFF set1 set2
redis-cli ZADD leaderboard 100 "player1" 200 "player2" 150 "player3"
redis-cli ZSCORE leaderboard "player1"
redis-cli ZRANK leaderboard "player1"
redis-cli ZREVRANK leaderboard "player1"
redis-cli ZRANGE leaderboard 0 -1 WITHSCORES
redis-cli ZREVRANGE leaderboard 0 9 WITHSCORES
redis-cli ZRANGEBYSCORE leaderboard 100 200 WITHSCORES
redis-cli ZINCRBY leaderboard 50 "player1"
redis-cli ZREM leaderboard "player1"
redis-cli ZCARD leaderboard
Pub/Sub Messaging
redis-cli SUBSCRIBE my-channel
redis-cli SUBSCRIBE channel1 channel2 channel3
redis-cli PSUBSCRIBE "user:*" "event:*"
redis-cli PUBLISH my-channel "Hello, subscribers!"
redis-cli PUBLISH user:123 '{"event":"login","timestamp":1700000000}'
redis-cli PUBSUB CHANNELS
redis-cli PUBSUB CHANNELS "user:*"
redis-cli PUBSUB NUMSUB channel1 channel2
redis-cli PUBSUB NUMPAT
redis-cli SUBSCRIBE events &
SUB_PID=$!
redis-cli PUBLISH events "message1"
redis-cli PUBLISH events "message2"
kill $SUB_PID
Lua Scripting
redis-cli EVAL "return 'hello'" 0
redis-cli EVAL "return redis.call('GET', KEYS[1])" 1 mykey
redis-cli EVAL "
local current = redis.call('GET', KEYS[1])
if not current then
redis.call('SET', KEYS[1], ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return 1
end
return 0
" 1 my-lock-key "locked" 30
SHA=$(redis-cli SCRIPT LOAD "return redis.call('GET', KEYS[1])")
redis-cli EVALSHA "$SHA" 1 mykey
redis-cli EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local current = redis.call('INCR', key)
if current == 1 then
redis.call('EXPIRE', key, window)
end
if current > limit then
return 0
end
return 1
" 1 "ratelimit:user:123" 100 60
redis-cli SCRIPT FLUSH
redis-cli SCRIPT EXISTS $SHA
Memory Analysis
redis-cli INFO memory
redis-cli MEMORY USAGE mykey
redis-cli MEMORY USAGE myhash SAMPLES 5
redis-cli --bigkeys
redis-cli MEMORY DOCTOR
redis-cli INFO keyspace
redis-cli DEBUG OBJECT mykey
redis-cli OBJECT IDLETIME mykey
redis-cli OBJECT ENCODING mykey
redis-cli DEBUG SLEEP 0
Persistence and Configuration
redis-cli CONFIG GET save
redis-cli CONFIG GET appendonly
redis-cli BGSAVE
redis-cli SAVE
redis-cli LASTSAVE
redis-cli BGREWRITEAOF
redis-cli FLUSHDB
redis-cli FLUSHDB ASYNC
redis-cli FLUSHALL
redis-cli -n 1 GET mykey
redis-cli MOVE mykey 1
redis-cli CONFIG REWRITE
Cluster Operations
redis-cli CLUSTER INFO
redis-cli CLUSTER NODES
redis-cli -c CLUSTER KEYSLOT mykey
redis-cli -c -h redis-cluster-node1 -p 7000 GET mykey
redis-cli CLUSTER SLOTS
redis-cli --cluster reshard redis-node1:7000
redis-cli --cluster add-node new-node:7006 existing-node:7000
redis-cli --cluster check redis-node1:7000
redis-cli --cluster rebalance redis-node1:7000
Monitoring and Diagnostics
redis-cli MONITOR
redis-cli INFO
redis-cli INFO server
redis-cli INFO clients
redis-cli INFO memory
redis-cli INFO stats
redis-cli INFO replication
redis-cli INFO keyspace
redis-cli SLOWLOG GET 10
redis-cli SLOWLOG LEN
redis-cli SLOWLOG RESET
redis-cli CLIENT LIST
redis-cli CLIENT KILL ID 123
redis-cli INFO commandstats | grep -E "cmd_(get|set|hget):"
redis-cli LATENCY LATEST
redis-cli LATENCY HISTORY event-name
redis-cli LATENCY RESET
Common Patterns
check_cache() {
local key="$1"
local value=$(redis-cli GET "$key")
if [ -n "$value" ]; then
echo "$value"
else
echo "CACHE_MISS"
fi
}
acquire_lock() {
local key="lock:$1"
local ttl=30
redis-cli SET "$key" "1" NX EX "$ttl"
}
release_lock() {
local key="lock:$1"
redis-cli DEL "$key"
}
redis-cli HSET "session:abc123" \
user_id 42 \
username "alice" \
role "admin" \
created_at 1700000000
redis-cli EXPIRE "session:abc123" 3600
redis-cli MULTI
redis-cli INCR "ratelimit:user:42:$(date +%s)"
redis-cli EXPIRE "ratelimit:user:42:$(date +%s)" 60
redis-cli EXEC
Troubleshooting
redis-cli -h redis.example.com ping
redis-cli DEBUG SLEEP 0
redis-cli TTL mykey
redis-cli --bigkeys
redis-cli MEMORY DOCTOR
redis-cli INFO replication | grep master_repl_offset
redis-cli INFO replication | grep slave_repl_offset