菜鸟科技网

Redis访问命令有哪些?

Redis 作为一款高性能的内存数据库,其访问命令是操作数据的核心,掌握这些命令能有效提升开发效率,Redis 的命令丰富多样,涵盖键值操作、数据结构操作、事务、连接管理等,下面将详细介绍常用访问命令及其使用场景。

Redis访问命令有哪些?-图1
(图片来源网络,侵删)

从基础的键值操作开始,SETGET 是最核心的命令。SET key value 用于设置键的值,SET name "Alice" 会创建一个键为 "name"、值为 "Alice" 的键值对;GET key 则用于获取键对应的值,如 GET name 返回 "Alice",如果键不存在,GET 返回 nil;若键存在但值不是字符串类型,GET 会返回错误。SET 命令还支持可选参数,如 EX 设置过期时间(秒),PX 设置过期时间(毫秒),NX 表示键不存在时才设置,XX 表示键存在时才设置,SET token "abc123" EX 3600 NX 表示如果 token 键不存在,则设置其值为 "abc123" 并在 3600 秒后过期。

对于删除操作,DEL key [key ...] 可删除一个或多个键,返回删除的键数量,如 DEL name age 会同时删除 "name" 和 "age" 两个键。EXISTS key 用于检查键是否存在,存在返回 1,否则返回 0。TYPE key 返回键对应值的类型,如字符串、列表、哈希等,帮助开发者确认数据结构。KEYS pattern 可匹配符合模式的键,KEYS user:* 匹配所有以 "user:" 开头的键,但该命令在键较多时性能较差,生产环境建议使用 SCAN 命令替代。

Redis 支持多种数据结构,每种结构都有专属操作命令,列表(List)的常用命令包括 LPUSH key value [value ...](将值插入列表左侧)、RPUSH key value [value ...](将值插入列表右侧)、LPOP key(移除并返回列表左侧第一个元素)、RPOP key(移除并返回列表右侧第一个元素)、LRANGE key start stop(获取列表指定范围的元素,0 -1 表示获取全部元素)。LPUSH mylist "a" "b" 会将 "a"、"b" 依次插入列表左侧,列表变为 ["b", "a"]LRANGE mylist 0 0 返回 "b"。

哈希(Hash)结构用于存储对象,HSET key field value 设置哈希表中字段的值,HGET key field 获取字段的值,HGETALL key 获取哈希表的所有字段和值,HDEL key field [field ...] 删除指定字段,HEXISTS key field 检查字段是否存在。HSET user:1 name "Bob" age 25 创建一个用户哈希表,HGET user:1 name 返回 "Bob"。

Redis访问命令有哪些?-图2
(图片来源网络,侵删)

集合(Set)是无序且不重复的元素集合,SADD key member [member ...] 添加成员,SMEMBERS key 获取所有成员,SREM key member [member ...] 删除成员,SCARD key 获取成员数量,SISMEMBER key member 判断成员是否存在。SADD myset "a" "b" "c" 创建集合,SISMEMBER myset "a" 返回 1。

有序集合(Sorted Set)在集合基础上增加了分数(score)属性,ZADD key score member [score member ...] 添加成员并设置分数,ZRANGE key start stop [WITHSCORES] 按分数升序获取成员,ZREVRANGE key start stop [WITHSCORES] 按分数降序获取成员,ZSCORE key member 获取成员分数。ZADD leaderboard 100 "Alice" 90 "Bob"ZRANGE leaderboard 0 -1 WITHSCORES 返回 ["Bob", "90", "Alice", "100"]

除了基本操作,Redis 还提供高级功能命令,事务(Transaction)通过 MULTIEXECDISCARD 实现,MULTI 开启事务,后续命令进入队列,EXEC 执行队列中的所有命令,DISCARD 取消事务。

MULTI
SET name "Charlie"
GET name
EXEC

执行后会依次设置 name 并获取其值,需要注意的是,事务不支持回滚,命令执行失败时,其他命令仍会执行。

Redis访问命令有哪些?-图3
(图片来源网络,侵删)

发布订阅(Pub/Sub)相关命令有 PUBLISH channel message(发布消息)、SUBSCRIBE channel [channel ...](订阅频道)、UNSUBSCRIBE channel [channel ...](取消订阅)。PUBLISH news "Hello" 向 news 频道发布消息,所有订阅该频道的客户端都会收到消息。

连接管理方面,AUTH password 用于密码认证,SELECT index 选择数据库(Redis 默认有 16 个数据库,索引 0-15),PING 测试连接是否正常,返回 PONG 表示连接成功。

命令分类 常用命令 功能描述
键值操作 SET/GET 设置/获取键值
DEL/EXISTS 删除键/检查键是否存在
TYPE/KEYS 获取值类型/匹配键名
列表操作 LPUSH/RPUSH 左侧/右侧插入元素
LPOP/RPOP 左侧/右侧弹出元素
LRANGE 获取列表范围元素
哈希操作 HSET/HGET 设置/获取哈希字段值
HGETALL/HDEL 获取所有字段和值/删除字段
集合操作 SADD/SMEMBERS 添加成员/获取所有成员
SREM/SCARD 删除成员/获取成员数量
有序集合操作 ZADD/ZRANGE 添加成员并设置分数/按分数排序获取成员
ZREVRANGE/ZSCORE 降序获取成员/获取成员分数
事务操作 MULTI/EXEC/DISCARD 开启事务/执行事务/取消事务
发布订阅 PUBLISH/SUBSCRIBE 发布消息/订阅频道
连接管理 AUTH/SELECT/PING 密码认证/选择数据库/测试连接

相关问答 FAQs

Q1: Redis 的 KEYS 命令为什么在生产环境中不推荐使用?
A1: KEYS pattern 命令会遍历 Redis 中的所有键,匹配符合模式的键名,当键数量较多时(例如超过 10 万),该命令会阻塞 Redis 服务器,导致其他客户端请求无法被处理,严重影响服务性能,生产环境中推荐使用 SCAN cursor [MATCH pattern] [COUNT count] 命令,它是基于游标的迭代器,可以非阻塞地遍历键,每次只返回少量数据,对服务器影响较小。

Q2: Redis 事务中的命令一定会全部成功执行吗?如果某个命令失败,其他命令会回滚吗?
A2: Redis 事务中的命令并不一定会全部成功执行,事务执行过程中,如果某个命令在语法上正确(例如键的类型不匹配导致操作失败),该命令会执行失败,但事务中的其他命令仍会继续执行,不会回滚,Redis 事务不提供回滚机制,这与关系型数据库的事务不同,在事务中先执行 SET key "value"(字符串类型),再执行 HGET key field(对字符串类型执行哈希操作会失败),HGET 会失败,但 SET 命令的结果仍会被提交,在使用 Redis 事务时,需要确保事务中的命令逻辑正确,避免因语法错误导致部分命令执行失败。

分享:
扫描分享到社交APP
上一篇
下一篇