Redis-cli常用命令及应用场景
Redis-cli 常用命令及应用场景
Redis 是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis-cli 是 Redis 的命令行界面,是与 Redis 服务器交互的主要方式。本文将详细介绍 Redis-cli 的常用命令及其应用场景。
一、 连接到 Redis 服务器
使用 Redis-cli 连接到 Redis 服务器非常简单,最基本的命令如下:
bash
redis-cli
默认情况下,redis-cli
会尝试连接到本地主机(127.0.0.1)的默认端口(6379)。
如果你的 Redis 服务器运行在不同的主机或端口上,可以使用以下选项:
-h <hostname>
:指定 Redis 服务器的主机名或 IP 地址。-p <port>
:指定 Redis 服务器的端口号。-a <password>
:指定连接 Redis 服务器所需的密码(如果已设置认证)。
例如,连接到 IP 地址为 192.168.1.100,端口号为 6380,密码为 "mypassword" 的 Redis 服务器:
bash
redis-cli -h 192.168.1.100 -p 6380 -a mypassword
连接成功后,Redis-cli 会显示 127.0.0.1:6379>
或类似的提示符,表示你已进入 Redis 的交互模式。
二、 常用命令
Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。以下是一些针对不同数据结构的常用命令。
1. 键值操作 (Keys)
SET key value [EX seconds|PX milliseconds]
:设置键值对,可选项EX
设置过期时间(秒),PX
设置过期时间(毫秒)。- 应用场景: 存储用户信息、配置信息、缓存数据。
- 示例:
SET username "john" EX 3600
设置键username
的值为 "john",并设置过期时间为 1 小时。
GET key
:获取键对应的值。- 应用场景: 获取缓存数据、用户信息等。
- 示例:
GET username
获取键username
的值。
DEL key [key ...]
:删除一个或多个键。- 应用场景: 删除过期数据、无效数据。
- 示例:
DEL username session_id
删除键username
和session_id
。
EXISTS key [key ...]
:检查一个或多个键是否存在。- 应用场景: 判断用户是否存在、缓存是否命中。
- 示例:
EXISTS username
检查键username
是否存在。
KEYS pattern
:查找所有符合给定模式的键。- 应用场景: 批量操作键、查找特定类型的键。
- 示例:
KEYS user:*
查找所有以user:
开头的键。
TYPE key
:返回键所存储的值的类型。- 应用场景: 确定键的类型以便使用正确的命令操作。
- 示例:
TYPE username
返回键username
的类型。
RENAME key newkey
:将键key
重命名为newkey
。- 应用场景: 修改键的名称。
- 示例:
RENAME username user_name
将键username
重命名为user_name
。
TTL key
:查看键的剩余生存时间(秒)。- 应用场景: 检查缓存的剩余时间。
- 示例:
TTL username
查看键username
的剩余生存时间。
PTTL key
:查看键的剩余生存时间(毫秒)。- 应用场景: 更精确地检查缓存的剩余时间。
- 示例:
PTTL username
查看键username
的剩余生存时间(毫秒)。
EXPIRE key seconds
:设置键的过期时间(秒)。- 应用场景: 设置缓存过期时间。
- 示例:
EXPIRE username 60
设置键username
的过期时间为 60 秒。
PEXPIRE key milliseconds
: 设置键的过期时间(毫秒)。- 应用场景: 更精确地设置缓存过期时间。
- 示例:
PEXPIRE username 10000
设置键username
的过期时间为10000毫秒。
2. 字符串 (String)
INCR key
:将键存储的数字值加一。- 应用场景: 计数器、统计访问次数。
- 示例:
INCR page_views
将键page_views
的值加一。
DECR key
:将键存储的数字值减一。- 应用场景: 减少库存等。
- 示例:
DECR stock
将键stock
的值减一。
INCRBY key increment
:将键存储的数字值增加指定的增量。- 应用场景: 批量增加计数、调整积分等。
- 示例:
INCRBY score 10
将键score
的值增加 10。
DECRBY key decrement
:将键存储的数字值减少指定的减量。- 应用场景: 批量减少库存等。
- 示例:
DECRBY stock 5
将键stock
的值减少 5。
APPEND key value
:将值追加到键已存在的值的末尾。- 应用场景: 日志记录、构建字符串。
- 示例:
APPEND log "New log entry"
将 "New log entry" 追加到键log
的值后面。
3. 哈希 (Hash)
HSET key field value
:将哈希表key
中域field
的值设为value
。- 应用场景: 存储对象属性,例如用户信息。
- 示例:
HSET user:1 name "John" age 30
设置哈希表user:1
的name
域为 "John",age
域为 30。
HGET key field
:获取哈希表key
中域field
的值。- 应用场景: 获取对象属性。
- 示例:
HGET user:1 name
获取哈希表user:1
中name
域的值。
HMSET key field value [field value ...]
:同时将多个域值对设置到哈希表key
中。- 应用场景: 一次性设置多个对象属性。
- 示例:
HMSET user:2 name "Jane" age 25 email "[email protected]"
HMGET key field [field ...]
:获取哈希表key
中一个或多个域的值。- 应用场景: 一次性获取多个对象属性。
- 示例:
HMGET user:1 name age
获取哈希表user:1
中name
和age
域的值。
HGETALL key
:获取哈希表key
中所有的域和值。- 应用场景: 获取对象的所有属性。
- 示例:
HGETALL user:1
获取哈希表user:1
中所有的域和值。
HDEL key field [field ...]
:删除哈希表key
中的一个或多个域。- 应用场景: 删除对象属性。
- 示例:
HDEL user:1 age
删除哈希表user:1
中的age
域。
HKEYS key
:获取哈希表key
中的所有域。- 应用场景: 获取对象的所有属性名。
- 示例:
HKEYS user:1
获取哈希表user:1
中的所有域。
HVALS key
:获取哈希表key
中的所有值。- 应用场景: 获取对象的所有属性值。
- 示例:
HVALS user:1
获取哈希表user:1
中的所有值。
HEXISTS key field
:查看哈希表key
中,指定的域是否存在。- 应用场景: 判断对象的某个属性是否存在。
- 示例:
HEXISTS user:1 email
检查哈希表user:1
中email
域是否存在。
4. 列表 (List)
LPUSH key value [value ...]
:将一个或多个值插入到列表key
的头部。- 应用场景: 实现栈、消息队列。
- 示例:
LPUSH tasks "task1" "task2"
将 "task1" 和 "task2" 插入到列表tasks
的头部。
RPUSH key value [value ...]
:将一个或多个值插入到列表key
的尾部。- 应用场景: 实现队列。
- 示例:
RPUSH tasks "task3" "task4"
将 "task3" 和 "task4" 插入到列表tasks
的尾部。
LPOP key
:移除并返回列表key
的头元素。- 应用场景: 从队列中取出任务。
- 示例:
LPOP tasks
移除并返回列表tasks
的头元素。
RPOP key
:移除并返回列表key
的尾元素。- 应用场景: 从队列尾部取出元素。
- 示例:
RPOP tasks
移除并返回列表tasks
的尾元素。
LRANGE key start stop
:获取列表key
中指定范围内的元素。- 应用场景: 分页显示列表数据。
- 示例:
LRANGE tasks 0 9
获取列表tasks
中索引从 0 到 9 的元素(前 10 个元素)。
LLEN key
:获取列表key
的长度。- 应用场景: 获取队列长度。
- 示例:
LLEN tasks
获取列表tasks
的长度。
LINDEX key index
:获取列表key
中指定索引的元素。- 应用场景: 获取列表中特定位置的元素。
- 示例:
LINDEX tasks 0
获取列表tasks
中索引为 0 的元素。
LREM key count value
:从列表key
中移除值为value
的元素。count
参数指定移除的数量。- 应用场景: 从列表中删除指定元素。
- 示例:
LREM tasks 1 "task1"
从列表tasks
中移除 1 个值为 "task1" 的元素。
5. 集合 (Set)
SADD key member [member ...]
:将一个或多个成员添加到集合key
中。- 应用场景: 存储标签、好友关系、唯一 IP 地址。
- 示例:
SADD tags "redis" "database" "nosql"
将 "redis"、"database" 和 "nosql" 添加到集合tags
中。
SMEMBERS key
:获取集合key
中的所有成员。- 应用场景: 获取用户的所有标签。
- 示例:
SMEMBERS tags
获取集合tags
中的所有成员。
SISMEMBER key member
:判断成员member
是否是集合key
的成员。- 应用场景: 判断用户是否拥有某个标签。
- 示例:
SISMEMBER tags "redis"
判断 "redis" 是否是集合tags
的成员。
SREM key member [member ...]
:移除集合key
中的一个或多个成员。- 应用场景: 删除用户的某个标签。
- 示例:
SREM tags "nosql"
移除集合tags
中的成员 "nosql"。
SCARD key
:获取集合key
的成员数量。- 应用场景: 统计用户的标签数量。
- 示例:
SCARD tags
获取集合tags
的成员数量。
SINTER key [key ...]
:返回所有给定集合的交集。- 应用场景: 查找共同好友。
- 示例:
SINTER user:1:friends user:2:friends
返回用户 1 和用户 2 的共同好友。
SUNION key [key ...]
:返回所有给定集合的并集。- 应用场景: 合并多个用户的标签。
- 示例:
SUNION user:1:tags user:2:tags
返回用户 1 和用户 2 的所有标签。
SDIFF key [key ...]
:返回第一个集合与其他集合的差集。- 应用场景: 查找用户A有而用户B没有的标签。
- 示例:
SDIFF user:1:tags user:2:tags
返回用户1有而用户2没有的标签。
6. 有序集合 (Sorted Set)
ZADD key score member [score member ...]
:将一个或多个成员及其分值添加到有序集合key
中。- 应用场景: 排行榜、带权重的任务队列。
- 示例:
ZADD leaderboard 100 "player1" 80 "player2" 90 "player3"
将成员 "player1"、"player2" 和 "player3" 及其分值添加到有序集合leaderboard
中。
ZRANGE key start stop [WITHSCORES]
:获取有序集合key
中指定范围内的成员,按照分值从小到大排序。可选参数WITHSCORES
可以同时返回成员的分值。- 应用场景: 获取排行榜前 N 名。
- 示例:
ZRANGE leaderboard 0 9 WITHSCORES
获取排行榜前 10 名及其分值。
ZREVRANGE key start stop [WITHSCORES]
:获取有序集合key
中指定范围内的成员,按照分值从大到小排序。- 应用场景: 获取排行榜后 N 名。
- 示例:
ZREVRANGE leaderboard 0 9 WITHSCORES
获取排行榜后 10 名及其分值。
ZRANK key member
:返回有序集合key
中成员member
的排名(从 0 开始)。- 应用场景: 获取用户在排行榜中的排名。
- 示例:
ZRANK leaderboard "player1"
获取 "player1" 在排行榜中的排名。
ZREVRANK key member
:返回有序集合key
中成员member
的排名,按照分值从大到小排序。- 应用场景: 获取用户在排行榜中的倒数排名。
- 示例:
ZREVRANK leaderboard "player1"
获取 "player1" 在排行榜中的倒数排名。
ZSCORE key member
:返回有序集合key
中成员member
的分值。- 应用场景: 获取用户在排行榜中的分数。
- 示例:
ZSCORE leaderboard "player1"
获取 "player1" 在排行榜中的分数。
ZREM key member [member ...]
:移除有序集合key
中的一个或多个成员。- 应用场景: 从排行榜中移除用户。
- 示例:
ZREM leaderboard "player2"
从排行榜中移除 "player2"。
ZCARD key
:获取有序集合key
的成员数量。- 应用场景: 统计排行榜中的用户数量。
- 示例:
ZCARD leaderboard
统计排行榜中的用户数量。
ZCOUNT key min max
:计算有序集合key
中,分值在min
和max
之间的成员数量。- 应用场景: 统计某个分数段内的用户数量。
- 示例:
ZCOUNT leaderboard 80 90
统计排行榜中分数在 80 到 90 之间的用户数量。
7. 其他常用命令
PING
:测试与 Redis 服务器的连接是否正常。如果连接正常,返回PONG
。- 应用场景: 检查 Redis 服务器是否可用。
ECHO message
:打印消息。- 应用场景: 测试、调试。
- 示例:
ECHO "Hello Redis"
打印 "Hello Redis"。
SELECT index
:切换到指定的数据库,Redis 默认有 16 个数据库(0-15)。- 应用场景: 隔离不同应用的数据。
- 示例:
SELECT 1
切换到数据库 1。
FLUSHDB
:清空当前数据库中的所有键。- 应用场景: 清空测试数据。
FLUSHALL
:清空所有数据库中的所有键。- 应用场景: 谨慎使用!清空所有数据。
CONFIG GET parameter
:获取 Redis 配置参数的值。- 应用场景: 查看 Redis 服务器配置。
- 示例:
CONFIG GET maxmemory
获取maxmemory
配置参数的值。
CONFIG SET parameter value
:设置 Redis 配置参数的值。- 应用场景: 修改 Redis 服务器配置。
- 示例:
CONFIG SET maxmemory 1gb
设置maxmemory
配置参数的值为 1GB。
INFO
:获取 Redis 服务器的信息和统计数据。- 应用场景: 监控 Redis 服务器状态。
CLIENT LIST
:列出连接到 Redis 服务器的客户端信息。- 应用场景: 查看客户端连接情况。
CLIENT KILL ip:port
:关闭指定的客户端连接。- 应用场景: 关闭异常的客户端连接。
SAVE
:同步保存数据到磁盘。- 应用场景: 手动触发数据持久化,可能会阻塞 Redis 服务器。
BGSAVE
:异步保存数据到磁盘。- 应用场景: 手动触发数据持久化,不会阻塞 Redis 服务器。
LASTSAVE
:返回最近一次成功将数据保存到磁盘的 UNIX 时间戳。- 应用场景: 查看数据持久化的时间。
三、 总结
Redis-cli 是一个强大的工具,可以帮助你轻松地与 Redis 服务器进行交互。本文介绍了 Redis-cli 的常用命令及其应用场景,涵盖了连接、键值操作、字符串操作、哈希操作、列表操作、集合操作、有序集合操作以及一些其他常用命令。希望本文能够帮助你更好地理解和使用 Redis。
请注意,这只是一些常用的命令,Redis-cli 还提供了更多高级命令和选项。你可以通过 HELP
命令查看所有命令的帮助信息,或者参考 Redis 官方文档获取更详细的信息。 熟练掌握这些命令能够让你更好地发挥 Redis 的性能优势,构建高效稳定的应用。