06_Redis指令全面解析:从基础到进阶

Redis 指令全面解析:从基础到进阶

在 Redis 的应用中,指令是实现数据高效管理与业务逻辑的关键,熟练掌握各类指令,能让开发者充分发挥 Redis 的强大性能。本文将全面梳理 Redis 的指令体系,涵盖数据类型操作、通用指令、事务与脚本,以及发布 / 订阅机制相关指令。

一、数据类型操作指令

(一)基本数据类型指令

字符串(String)

SET:用于设置指定键的值,语法为SET key value [EX seconds] [PX milliseconds] [NX|XX],可设置过期时间,或根据键是否存在来决定是否设置值。常用于存储简单数据,如在用户信息管理系统中存储用户名。

GET:获取指定键的值,语法为GET key。在需要展示用户信息时,可获取对应键的值。

INCR:将指定键的值递增 1,若键不存在则初始化为 0 再递增,语法为INCR key。常用于统计数据,如统计文章浏览量。

哈希(Hash)

HSET:为哈希表中的字段赋值,语法为HSET key field value,适用于存储对象的多个属性,如用户详细信息。

HGET:获取哈希表中指定字段的值,语法为HGET key field。在展示用户详细信息时,可获取对应字段的值。

HGETALL:获取哈希表中的所有字段和值,语法为HGETALL key。在用户信息编辑页面,可获取所有信息供用户修改。

列表(List)

RPUSH:将一个或多个值插入到列表的尾部,语法为RPUSH key value [value...]。在任务管理系统中,可用于存储任务。

LPOP:移除并返回列表的第一个元素,语法为LPOP key。在任务处理系统中,工作线程可通过此指令获取任务。

LLEN:获取列表的长度,语法为LLEN key。在任务管理系统的统计模块中,可获取任务总数。

集合(Set)

SADD:将一个或多个成员添加到集合中,语法为SADD key member [member...]。在社交系统中,可用于存储用户的好友列表。

SMEMBERS:获取集合中的所有成员,语法为SMEMBERS key。在展示用户好友列表时,可获取所有好友 ID。

SISMEMBER:判断成员是否在集合中,语法为SISMEMBER key member。在社交系统中,可用于判断用户是否为好友。

有序集合(Sorted Set)

ZADD:将一个或多个成员及其分数添加到有序集合中,语法为ZADD key score1 member1 [score2 member2...]。在游戏排行榜系统中,可用于存储玩家的分数和排名。

ZRANGE:按照分数从小到大的顺序返回有序集合中指定区间的成员,语法为ZRANGE key start stop [WITHSCORES]。在展示游戏排行榜时,可获取指定范围的玩家及其分数。

ZREVRANK:返回成员在有序集合中的排名(从大到小),语法为ZREVRANK key member。在游戏排行榜系统中,玩家可通过此指令查看自己的排名。

(二)特殊数据类型指令

HyperLogLog

PFADD:将一个或多个元素添加到 HyperLogLog 中,语法为PFADD key element [element...]。在网站流量统计中,用于统计每日活跃用户。

PFCOUNT:计算 HyperLogLog 中的近似基数,语法为PFCOUNT key [key...]。在网站流量统计报表中,可获取每天的活跃用户数。

GeoHash

GEOADD:将一个或多个地理位置添加到有序集合中,语法为GEOADD key longitude latitude member [longitude latitude member...]。在位置服务系统中,用于存储城市的地理位置。

GEODIST:计算两个地理位置之间的距离,语法为GEODIST key member1 member2 [unit]。在物流配送系统中,可用于计算两个配送点之间的距离。

Bitmap

SETBIT:设置 Bitmap 中指定偏移量的值,语法为SETBIT key offset value,value 只能是 0 或 1。在用户登录统计中,可用于记录每天用户的登录情况。

BITCOUNT:计算 Bitmap 中指定范围内值为 1 的数量,语法为BITCOUNT key [start end]。在统计每日登录用户数时,可获取当天登录的用户数。

Stream

XADD:向 Stream 中添加一个新的消息,语法为XADD key [NX|XX] [MAXLEN [~] count] field value [field value...]。在即时通讯系统中,用于存储用户的聊天消息。

XRANGE:获取 Stream 中指定范围内的消息,语法为XRANGE key start end [COUNT count]。在展示用户聊天记录时,可获取指定范围内的聊天消息。

二、通用指令

KEYS:查找符合特定模式的所有键,语法为KEYS pattern,模式中可使用通配符。在电商系统中,可用于获取所有与商品相关的键。但在生产环境中需谨慎使用,因其会遍历整个键空间,可能导致 Redis 阻塞,建议使用基于游标的SCAN指令替代。

DEL:删除指定的一个或多个键值对,语法为DEL key [key...]。在用户管理系统中,可用于删除用户注销时的所有相关键值对。

EXISTS:判断某个键是否存在,语法为EXISTS key。在文件存储系统中,可用于判断文件对应的键是否存在,避免不必要的错误处理。

EXPIRE:设置键的过期时间,语法为EXPIRE key seconds。在验证码系统中,可用于设置验证码的有效期。

TTL:查看键的剩余生存时间,语法为TTL key。在缓存系统中,可用于监控缓存数据的剩余生存时间,以便提前更新缓存。

三、事务相关指令

MULTI:标记一个事务块的开始,使后续命令进入队列,语法为MULTI。在电商系统中,可用于同时更新商品库存和订单状态。

EXEC:执行所有在MULTI之后入队的命令,提交事务,语法为EXEC。能保证事务内命令的原子性执行,确保数据一致性。

DISCARD:取消当前的事务块,清空事务队列,语法为DISCARD。在事务执行过程中,若发现条件不满足,可使用此指令取消事务。

WATCH:监控一个或多个键,在事务执行前检查这些键是否被其他客户端修改,语法为WATCH key [key...]。在多人同时操作同一数据的场景中,可防止数据冲突。

UNWATCH:取消所有的WATCH监控,语法为UNWATCH。在事务执行完成或不需要再监控键的变化时,可释放监控资源。

四、脚本相关指令

EVAL:在 Redis 中执行 Lua 脚本,语法为EVAL script numkeys key [key...] arg [arg...]。可用于实现复杂的业务逻辑,如计算用户订单总金额并更新到 Redis 中。

EVALSHA:通过脚本的 SHA1 摘要来执行 Lua 脚本,语法为EVALSHA sha1 numkeys key [key...] arg [arg...]。在脚本已通过SCRIPT LOAD加载并获取 SHA1 摘要后,可避免重复传输脚本内容。

SCRIPT LOAD:将 Lua 脚本加载到 Redis 服务器中,但不立即执行,返回脚本的 SHA1 摘要,语法为SCRIPT LOAD script。在应用启动时,可加载常用的 Lua 脚本,提高执行效率。

SCRIPT EXISTS:检查指定的 SHA1 摘要对应的脚本是否已经加载到 Redis 中,语法为SCRIPT EXISTS sha1 [sha1...]。在执行EVALSHA前,可先检查脚本是否已加载。

SCRIPT FLUSH:删除所有已加载的 Lua 脚本,语法为SCRIPT FLUSH。在需要更新脚本或清理服务器上的脚本缓存时,可使用此指令。

五、发布 / 订阅(pub/sub)指令

PUBLISH:将消息发送到指定的频道,语法为PUBLISH channel message。在新闻资讯系统中,可用于发布新文章消息。

SUBSCRIBE:订阅一个或多个频道,客户端执行后开始接收指定频道的消息,语法为SUBSCRIBE channel [channel...]。用户客户端可通过此指令订阅感兴趣的频道,接收消息推送。

UNSUBSCRIBE:退订一个或多个频道,若不指定频道则退订所有已订阅的频道,语法为UNSUBSCRIBE [channel [channel...]]。当用户不想再接收某个频道的消息时,可使用此指令退订。

PSUBSCRIBE:订阅符合指定模式的频道,模式中可使用通配符,语法为PSUBSCRIBE pattern [pattern...]。在系统中有多个相关频道时,可一次性订阅所有符合模式的频道。

PUNSUBSCRIBE:退订符合指定模式的频道,若不指定模式则退订所有通过PSUBSCRIBE订阅的频道,语法为PUNSUBSCRIBE [pattern [pattern...]]。当客户端不再想接收符合特定模式的频道消息时,可使用此指令退订。

posted @ 2025-09-19 20:06  S&L·chuck  阅读(8)  评论(0)    收藏  举报