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 删除键 usernamesession_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:1name 域为 "John",age 域为 30。
  • HGET key field:获取哈希表 key 中域 field 的值。
    • 应用场景: 获取对象属性。
    • 示例: HGET user:1 name 获取哈希表 user:1name 域的值。
  • 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:1nameage 域的值。
  • 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:1email 域是否存在。

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 中,分值在 minmax 之间的成员数量。
    • 应用场景: 统计某个分数段内的用户数量。
    • 示例: 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 的性能优势,构建高效稳定的应用。

THE END