Redis CLI基本命令

Redis CLI简介

Redis命令行界面(Redis CLI)是Redis官方提供的命令行工具,用于与Redis服务器进行交互。通过Redis CLI,用户可以执行各种Redis命令,管理Redis数据,监控Redis服务器状态等。

Redis CLI的特点

  1. 简单易用:Redis CLI提供了直观的命令行界面,用户可以直接输入命令与Redis交互。

  2. 功能强大:Redis CLI支持所有Redis命令,可以执行各种复杂的操作。

  3. 灵活配置:Redis CLI支持多种连接选项,可以连接到本地或远程的Redis服务器。

  4. 脚本支持: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
OK

Redis 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的字符串数据类型,了解如何使用字符串类型存储和操作数据。

« 上一篇 Redis架构概述 下一篇 » Redis字符串数据类型