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...]]。当客户端不再想接收符合特定模式的频道消息时,可使用此指令退订。

浙公网安备 33010602011771号