Redis CLI基本命令
Redis CLI简介
Redis命令行界面(Redis CLI)是Redis官方提供的命令行工具,用于与Redis服务器进行交互。通过Redis CLI,用户可以执行各种Redis命令,管理Redis数据,监控Redis服务器状态等。
Redis CLI的特点
简单易用:Redis CLI提供了直观的命令行界面,用户可以直接输入命令与Redis交互。
功能强大:Redis CLI支持所有Redis命令,可以执行各种复杂的操作。
灵活配置:Redis CLI支持多种连接选项,可以连接到本地或远程的Redis服务器。
脚本支持:Redis CLI可以执行脚本文件,批量执行命令。
连接Redis服务器
基本连接
连接到本地Redis服务器:
redis-cli默认情况下,Redis CLI会连接到本地(127.0.0.1)的6379端口。
连接到远程Redis服务器:
redis-cli -h <host> -p <port>
# 示例:连接到192.168.1.100的6379端口
redis-cli -h 192.168.1.100 -p 6379带认证的连接
使用密码认证:
# 方法1:在命令中指定密码
redis-cli -h <host> -p <port> -a <password>
# 方法2:连接后使用AUTH命令认证
redis-cli -h <host> -p <port>
127.0.0.1:6379> AUTH <password>
OK连接到指定数据库
Redis默认有16个数据库(编号0-15),可以通过-n参数指定连接到哪个数据库:
redis-cli -n <db-number>
# 示例:连接到数据库1
redis-cli -n 1基本命令操作
键值操作命令
设置键值对
# 设置字符串类型的键值对
SET key value
# 示例:设置键名为name,值为Redis的值
127.0.0.1:6379> SET name Redis
OK
# 设置带过期时间的键值对(10秒后过期)
SET key value EX seconds
# 示例:设置键名为temp,值为test,10秒后过期
127.0.0.1:6379> SET temp test EX 10
OK获取值
# 获取键的值
GET key
# 示例:获取键名为name的值
127.0.0.1:6379> GET name
"Redis"
# 尝试获取不存在的键
127.0.0.1:6379> GET non_existent_key
(nil)删除键
# 删除指定的键
DEL key [key ...]
# 示例:删除键名为name的键
127.0.0.1:6379> DEL name
(integer) 1
# 示例:同时删除多个键
127.0.0.1:6379> DEL key1 key2 key3
(integer) 2 # 成功删除了2个键检查键是否存在
# 检查键是否存在
EXISTS key
# 示例:检查键名为name的键是否存在
127.0.0.1:6379> EXISTS name
(integer) 0 # 0表示不存在,1表示存在设置键的过期时间
# 设置键的过期时间(秒)
EXPIRE key seconds
# 示例:设置键名为temp的键10秒后过期
127.0.0.1:6379> EXPIRE temp 10
(integer) 1
# 查看键的剩余过期时间(秒)
TTL key
# 示例:查看键名为temp的键的剩余过期时间
127.0.0.1:6379> TTL temp
(integer) 5 # 剩余5秒
# 查看键的剩余过期时间(毫秒)
PTTL key
# 示例:查看键名为temp的键的剩余过期时间(毫秒)
127.0.0.1:6379> PTTL temp
(integer) 3500 # 剩余3500毫秒
# 移除键的过期时间
PERSIST key
# 示例:移除键名为temp的键的过期时间
127.0.0.1:6379> PERSIST temp
(integer) 1键管理命令
查看所有键
# 查看所有键(生产环境慎用,可能会阻塞服务器)
KEYS *
# 示例:查看所有键
127.0.0.1:6379> KEYS *
1) "name"
2) "age"
# 查看匹配模式的键
KEYS pattern
# 示例:查看以user开头的键
127.0.0.1:6379> KEYS user*
1) "user:1"
2) "user:2"随机获取键
# 随机获取一个键
RANDOMKEY
# 示例:随机获取一个键
127.0.0.1:6379> RANDOMKEY
"name"重命名键
# 重命名键
RENAME key newkey
# 示例:将键名oldname重命名为newname
127.0.0.1:6379> RENAME oldname newname
OK
# 仅当新键不存在时重命名
RENAMENX key newkey
# 示例:仅当newname不存在时,将键名oldname重命名为newname
127.0.0.1:6379> RENAMENX oldname newname
(integer) 1 # 1表示成功,0表示新键已存在查看键的类型
# 查看键的类型
TYPE key
# 示例:查看键名为name的键的类型
127.0.0.1:6379> TYPE name
"string"
# 示例:查看键名为users的键的类型
127.0.0.1:6379> TYPE users
"list"服务器管理命令
查看服务器信息
# 查看服务器信息
INFO [section]
# 示例:查看所有信息
127.0.0.1:6379> INFO
# Server
redis_version:7.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abcdef1234567890
redis_mode:standalone
os:Linux 5.4.0-91-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:c11-builtin
gcc_version:9.3.0
process_id:12345
process_supervised:no
run_id:1234567890abcdef1234567890abcdef12345678
tcp_port:6379
server_time_usec:1635789012345678
uptime_in_seconds:3600
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:12345678
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf
# 示例:查看内存信息
127.0.0.1:6379> INFO memory
# Memory
used_memory:10485760
used_memory_human:10.00M
used_memory_rss:20971520
used_memory_rss_human:20.00M
used_memory_peak:15728640
used_memory_peak_human:15.00M
used_memory_peak_perc:66.67%
used_memory_overhead:1024000
used_memory_startup:1024000
used_memory_dataset:9461760
used_memory_dataset_perc:90.23%
allocator_allocated:10485760
allocator_active:12582912
allocator_resident:20971520
...查看命令统计
# 查看命令执行统计
INFO commandstats
# 示例:查看命令执行统计
127.0.0.1:6379> INFO commandstats
# Commandstats
cmdstat_set:calls=10,usec=100,usec_per_call=10.00
cmdstat_get:calls=20,usec=50,usec_per_call=2.50
cmdstat_del:calls=5,usec=25,usec_per_call=5.00
...测试连接
# 测试与Redis服务器的连接
PING
# 示例:测试连接
127.0.0.1:6379> PING
PONG
# 带消息的PING
127.0.0.1:6379> PING "Hello Redis"
"Hello Redis"选择数据库
# 选择指定的数据库
SELECT index
# 示例:选择数据库1
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> # 提示符变为[1],表示当前在数据库1清空数据库
# 清空当前数据库
FLUSHDB
# 示例:清空当前数据库
127.0.0.1:6379> FLUSHDB
OK
# 清空所有数据库
FLUSHALL
# 示例:清空所有数据库
127.0.0.1:6379> FLUSHALL
OKRedis CLI的高级使用
命令批量执行
使用管道执行多个命令
# 在命令行中使用管道执行多个命令
redis-cli << EOF
SET key1 value1
SET key2 value2
GET key1
GET key2
EOF
# 输出结果
OK
OK
"value1"
"value2"使用文件执行命令
# 创建包含Redis命令的文件
cat > commands.txt << EOF
SET name Redis
SET version 7.0.8
GET name
GET version
EOF
# 执行文件中的命令
redis-cli < commands.txt
# 输出结果
OK
OK
"Redis"
"7.0.8"监控Redis命令执行
# 监控Redis服务器执行的命令
MONITOR
# 示例:启动监控
127.0.0.1:6379> MONITOR
OK
1635789012.345678 [0 127.0.0.1:12345] "SET" "name" "Redis"
1635789013.456789 [0 127.0.0.1:12345] "GET" "name"
# 按Ctrl+C退出监控执行Lua脚本
# 执行Lua脚本
EVAL script numkeys key [key ...] arg [arg ...]
# 示例:执行简单的Lua脚本
127.0.0.1:6379> EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 name Redis
OK
# 示例:执行复杂的Lua脚本
127.0.0.1:6379> EVAL "local counter = redis.call('INCR', KEYS[1]); redis.call('EXPIRE', KEYS[1], ARGV[1]); return counter;" 1 visit_count 60
(integer) 1连接池管理
设置连接超时
# 设置连接超时(秒)
redis-cli -h <host> -p <port> -t <timeout>
# 示例:设置10秒超时
redis-cli -h 192.168.1.100 -p 6379 -t 10保持连接
# 保持连接并定期发送PING命令
redis-cli -h <host> -p <port> --keepalive <interval>
# 示例:每5秒发送一次PING命令
redis-cli -h 192.168.1.100 -p 6379 --keepalive 5实际操作示例
示例1:基本键值操作
# 连接到Redis
redis-cli
# 设置键值对
127.0.0.1:6379> SET user:1:name "John"
OK
127.0.0.1:6379> SET user:1:age 30
OK
127.0.0.1:6379> SET user:1:email "john@example.com"
OK
# 获取值
127.0.0.1:6379> GET user:1:name
"John"
127.0.0.1:6379> GET user:1:age
"30"
# 查看所有相关的键
127.0.0.1:6379> KEYS user:1:*
1) "user:1:name"
2) "user:1:age"
3) "user:1:email"
# 设置过期时间
127.0.0.1:6379> EXPIRE user:1:email 3600
(integer) 1
# 查看剩余过期时间
127.0.0.1:6379> TTL user:1:email
(integer) 3595
# 删除键
127.0.0.1:6379> DEL user:1:age
(integer) 1
# 再次查看所有相关的键
127.0.0.1:6379> KEYS user:1:*
1) "user:1:name"
2) "user:1:email"示例2:服务器管理
# 连接到Redis
redis-cli
# 查看服务器信息
127.0.0.1:6379> INFO server
# Server
redis_version:7.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:abcdef1234567890
redis_mode:standalone
os:Linux 5.4.0-91-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:c11-builtin
gcc_version:9.3.0
process_id:12345
process_supervised:no
run_id:1234567890abcdef1234567890abcdef12345678
tcp_port:6379
server_time_usec:1635789012345678
uptime_in_seconds:3600
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:12345678
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf
# 查看内存使用情况
127.0.0.1:6379> INFO memory
# Memory
used_memory:10485760
used_memory_human:10.00M
used_memory_rss:20971520
used_memory_rss_human:20.00M
used_memory_peak:15728640
used_memory_peak_human:15.00M
used_memory_peak_perc:66.67%
...
# 查看客户端连接
127.0.0.1:6379> INFO clients
# Clients
connected_clients:1
client_recent_max_input_buffer:0
client_recent_max_output_buffer:0
blocked_clients:0
...常见问题与解决方案
1. 连接Redis服务器失败
问题:无法连接到Redis服务器
解决方案:
- 确认Redis服务器是否正在运行
- 检查连接参数是否正确(主机名、端口号)
- 确认防火墙是否开放了Redis端口
- 检查Redis服务器是否配置了密码认证
2. 执行命令返回错误
问题:执行命令时返回错误信息
解决方案:
- 检查命令语法是否正确
- 确认键是否存在
- 检查键的类型是否与命令匹配
- 查看错误信息,根据提示解决问题
3. 命令执行缓慢
问题:执行某些命令时速度很慢
解决方案:
- 避免在生产环境使用KEYS *等会阻塞服务器的命令
- 对于大型数据集,考虑使用SCAN命令代替KEYS命令
- 检查Redis服务器的内存使用情况,避免内存不足
- 考虑使用管道(pipeline)批量执行命令
小结
本教程详细介绍了Redis命令行界面(CLI)的基本使用方法、常用命令以及实际操作示例。通过本教程的学习,你应该已经掌握了如何使用Redis CLI连接到Redis服务器,执行基本的键值操作,管理Redis数据库,以及监控Redis服务器状态等技能。
Redis CLI是学习和使用Redis的重要工具,通过不断练习和实践,你将能够更加熟练地使用Redis CLI执行各种复杂的操作,为后续的Redis学习和应用打下坚实的基础。
在下一集中,我们将学习Redis的字符串数据类型,了解如何使用字符串类型存储和操作数据。