Redis 数据库语法速查表:全景梳理 📅 2026/7/14 18:48:12 Redis 是一款高性能的内存数据结构服务器广泛应用于缓存、消息队列、分布式锁、实时分析等场景。本文以速查表的形式从全局命令、数据类型String、Hash、List、Set、Sorted Set、Bitmap、HyperLogLog、GEO、Stream到高级功能事务、Lua脚本、发布订阅、管道进行全景式梳理。核心速记Redis 是“数据结构服务器”每个数据类型都有特定的使用场景。SET/GET只是开始ZADD、SINTER、BITCOUNT才是精华。一、全局通用命令命令作用示例KEYS pattern查找所有匹配的 key生产环境慎用可能阻塞KEYS user:*SCAN cursor [MATCH pattern] [COUNT count]推荐迭代 key不阻塞SCAN 0 MATCH user:* COUNT 100EXISTS key [key ...]判断 key 是否存在EXISTS user:1001TYPE key查看 key 的数据类型TYPE user:1001→hashDEL key [key ...]删除一个或多个 keyDEL user:1001UNLINK key [key ...]异步删除非阻塞UNLINK big:keyEXPIRE key seconds设置过期时间秒EXPIRE session:abc 3600PEXPIRE key milliseconds设置过期时间毫秒PEXPIRE session:abc 3600000TTL key查看剩余存活时间秒TTL session:abc→3600PTTL key查看剩余存活时间毫秒PTTL session:abc→3600000PERSIST key移除过期时间使 key 永久有效PERSIST session:abcRENAME key newkey重命名 keyRENAME old:user new:userRENAMENX key newkey仅当新 key 不存在时重命名RENAMENX old:user new:userDBSIZE返回当前数据库 key 的数量DBSIZEFLUSHDB清空当前数据库FLUSHDBFLUSHALL清空所有数据库FLUSHALLSELECT index切换数据库0-15默认 16 个SELECT 1INFO [section]获取 Redis 服务器信息INFO memory二、String字符串本质存储二进制安全的字符串最大 512MB支持整数自增/自减、位操作。是 Redis 最基础的数据结构。命令作用示例SET key value [EX seconds] [PX ms] [NX|XX]设置字符串支持过期时间和 NX/XXSET user:1001:name 张三 EX 600GET key获取字符串GET user:1001:nameMSET key value [key value ...]批量设置MSET user:1001:name 张三 user:1001:age 28MGET key [key ...]批量获取MGET user:1001:name user:1001:ageSETNX key value仅当 key 不存在时设置用于分布式锁SETNX lock:order:1001 1SETEX key seconds value设置值并指定过期时间秒SETEX session:abc 3600 user_id1001PSETEX key ms value设置值并指定过期时间毫秒PSETEX session:abc 3600000 user_id1001GETSET key value设置新值返回旧值原子操作GETSET counter 10INCR key自增 1INCR page:view:homeINCRBY key increment自增指定数值INCRBY product:stock:1001 5DECR key自减 1DECR product:stock:1001DECRBY key decrement自减指定数值DECRBY product:stock:1001 3INCRBYFLOAT key increment浮点数自增INCRBYFLOAT account:balance 0.5APPEND key value追加内容APPEND user:1001:desc 有 5 年经验STRLEN key获取字符串长度STRLEN user:1001:nameGETRANGE key start end获取子字符串GETRANGE user:1001:name 0 3三、Hash哈希本质存储对象的字段-值映射类似 Java 的 HashMap适合存储对象结构如用户信息、商品信息支持对单个字段的增删改查。命令作用示例HSET key field value [field value ...]设置 hash 字段HSET user:1001 name 张三 age 28 city 北京HGET key field获取单个字段HGET user:1001 nameHGETALL key获取所有字段和值HGETALL user:1001HMGET key field [field ...]批量获取字段HMGET user:1001 name ageHMSET key field value [field value ...]批量设置已弃用用 HSET 替代—HINCRBY key field increment字段自增HINCRBY user:1001 age 1HINCRBYFLOAT key field increment字段浮点数自增HINCRBYFLOAT user:1001 salary 500.5HDEL key field [field ...]删除字段HDEL user:1001 ageHEXISTS key field判断字段是否存在HEXISTS user:1001 nameHLEN key获取字段数量HLEN user:1001HKEYS key获取所有字段名HKEYS user:1001HVALS key获取所有字段值HVALS user:1001HSCAN key cursor [MATCH pattern] [COUNT count]迭代 hash 字段HSCAN user:1001 0 MATCH name*四、List列表本质有序的字符串列表双向链表/压缩列表适合消息队列、最新消息列表、历史记录等场景。支持左右两端操作。命令作用示例LPUSH key value [value ...]左侧头部插入一个或多个元素LPUSH logs 2026-01-01 10:00:00RPUSH key value [value ...]右侧尾部插入一个或多个元素RPUSH logs 2026-01-01 10:00:00LPOP key [count]左侧弹出元素LPOP logsRPOP key [count]右侧弹出元素RPOP logsLRANGE key start stop获取指定范围元素LRANGE logs 0 9最新 10 条LINDEX key index获取指定索引元素LINDEX logs 0LSET key index value设置指定索引的值LSET logs 0 new messageLINSERT key BEFORE|AFTER pivot value在指定元素前后插入LINSERT logs BEFORE old newLLEN key获取列表长度LLEN logsLREM key count value移除指定数量的指定值LREM logs 2 error移除 2 个 errorLTRIM key start stop裁剪列表保留指定范围LTRIM logs 0 99保留前 100 条RPOPLPUSH source destination从右弹出从左插入原子操作RPOPLPUSH queue:processing queue:doneBLPOP key [key ...] timeout阻塞式左侧弹出BLPOP queue:tasks 30等待 30 秒BRPOP key [key ...] timeout阻塞式右侧弹出BRPOP queue:tasks 30五、Set集合本质无序、不重复的字符串集合哈希表/整数集合适合标签系统、共同好友、抽奖、去重等场景。命令作用示例SADD key member [member ...]添加一个或多个成员SADD tags:article:1001 redis databaseSREM key member [member ...]移除一个或多个成员SREM tags:article:1001 databaseSMEMBERS key获取所有成员SMEMBERS tags:article:1001SISMEMBER key member判断是否集合成员SISMEMBER tags:article:1001 redisSCARD key获取集合基数元素数量SCARD tags:article:1001SPOP key [count]随机弹出元素SPOP lucky:drawSRANDMEMBER key [count]随机获取成员不删除SRANDMEMBER lucky:draw 3SINTER key [key ...]交集SINTER tags:article:1001 tags:article:1002SUNION key [key ...]并集SUNION tags:article:1001 tags:article:1002SDIFF key [key ...]差集SDIFF tags:article:1001 tags:article:1002SINTERSTORE destination key [key ...]交集存储到新 keySINTERSTORE common:tags tags:a tags:bSSCAN key cursor [MATCH pattern] [COUNT count]迭代 set 成员SSCAN tags:article:1001 0 MATCH redis*六、Sorted Set有序集合本质带分数的有序集合跳表哈希表适合排行榜、延迟队列、按分数排序的集合等场景。命令作用示例ZADD key score member [score member ...]添加成员指定分数ZADD rank 100 Alice 95 BobZREM key member [member ...]移除成员ZREM rank BobZSCORE key member获取成员分数ZSCORE rank AliceZINCRBY key increment member成员分数增加ZINCRBY rank 5 AliceZCARD key获取成员数量ZCARD rankZCOUNT key min max统计分数区间成员数ZCOUNT rank 90 100ZRANK key member获取排名升序0 开始ZRANK rank AliceZREVRANK key member获取排名降序ZREVRANK rank AliceZRANGE key start stop [WITHSCORES]按排名范围获取成员升序ZRANGE rank 0 2 WITHSCORESZREVRANGE key start stop [WITHSCORES]按排名范围获取成员降序ZREVRANGE rank 0 2 WITHSCORESZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]按分数范围获取成员ZRANGEBYSCORE rank 90 100 WITHSCORESZREVRANGEBYSCORE key max min [WITHSCORES]按分数范围获取降序ZREVRANGEBYSCORE rank 100 90 WITHSCORESZREMRANGEBYRANK key start stop按排名范围移除ZREMRANGEBYRANK rank 0 1ZREMRANGEBYSCORE key min max按分数范围移除ZREMRANGEBYSCORE rank 80 85ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]多个有序集合的并集ZUNIONSTORE all:rank 2 rank:day1 rank:day2ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]多个有序集合的交集ZINTERSTORE common:rank 2 rank:2025 rank:2026七、Bitmap位图本质对字符串按位操作适合签到统计、在线状态、布隆过滤器等场景。每个 key 最大支持 2^32 位512MB。命令作用示例SETBIT key offset value设置某一位为 0/1SETBIT sign:user:1001:2026-01 0 1GETBIT key offset获取某一位的值GETBIT sign:user:1001:2026-01 0BITCOUNT key [start end]统计 1 的个数BITCOUNT sign:user:1001:2026-01BITPOS key bit [start] [end]查找第一个 0/1 的位置BITPOS sign:user:1001:2026-01 0BITOP operation destkey key [key ...]位运算AND/OR/XOR/NOTBITOP AND week:active active:mon active:tue八、HyperLogLog基数统计本质概率数据结构误差约 0.81%适合独立访客数UV统计等需要去重计数的场景。每个 key 固定占用约 12KB 内存。命令作用示例PFADD key element [element ...]添加元素PFADD uv:2026-01-01 user1001 user1002PFCOUNT key [key ...]获取基数去重计数PFCOUNT uv:2026-01-01PFMERGE destkey sourcekey [sourcekey ...]合并多个 HyperLogLogPFMERGE uv:week uv:mon uv:tue uv:wed九、GEO地理空间本质基于 Sorted Set 封装的地理位置功能适合附近的人、LBS 服务等场景。命令作用示例GEOADD key longitude latitude member [longitude latitude member ...]添加地理位置GEOADD locations 116.397 39.907 天安门GEOPOS key member [member ...]获取位置坐标GEOPOS locations 天安门GEODIST key member1 member2 [unit]计算两位置距离m/km/mi/ftGEODIST locations 天安门 故宫 kmGEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count]查询半径内的成员GEORADIUS locations 116.397 39.907 5 km WITHDISTGEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [COUNT count]以成员为中心查询GEORADIUSBYMEMBER locations 天安门 5 km十、Stream消息流本质Redis 5.0 引入的持久化消息队列支持消费者组、消息确认、消息回溯是 Redis 中最完善的消息队列方案。命令作用示例XADD key ID field value [field value ...]添加消息*表示自动生成 IDXADD events * type login user 1001XLEN key获取 Stream 长度XLEN eventsXRANGE key start end [COUNT count]查询消息范围XRANGE events - COUNT 10XREVRANGE key end start [COUNT count]反向查询消息XREVRANGE events - COUNT 10XREAD COUNT count STREAMS key ID读取消息阻塞/非阻塞XREAD BLOCK 0 STREAMS events $XGROUP CREATE key group ID [MKSTREAM]创建消费者组XGROUP CREATE events processors 0XREADGROUP GROUP group consumer COUNT count STREAMS key ID消费者组读取XREADGROUP GROUP processors c1 STREAMS events XACK key group ID [ID ...]确认消息已处理XACK events processors 123456-0十一、高级功能11.1 事务Transactions命令作用示例MULTI开启事务MULTIEXEC执行事务EXECDISCARD取消事务DISCARDWATCH key [key ...]监视 key乐观锁WATCH user:1001:balanceUNWATCH取消监视UNWATCHredisMULTI SET user:1001:name 张三 SET user:1001:age 28 EXEC11.2 Lua 脚本命令作用示例EVAL script numkeys key [key ...] arg [arg ...]执行 Lua 脚本EVAL return redis.call(GET, KEYS[1]) 1 user:1001:nameEVALSHA sha1 numkeys key [key ...] arg [arg ...]执行缓存的脚本EVALSHA sha1 1 user:1001:nameSCRIPT LOAD script加载脚本到缓存SCRIPT LOAD return redis.call(GET, KEYS[1])典型 Lua 脚本原子扣减库存lua-- 扣减库存脚本 -- KEYS[1]: 库存 key -- ARGV[1]: 要扣减的数量 local stock redis.call(GET, KEYS[1]) if stock and tonumber(stock) tonumber(ARGV[1]) then redis.call(DECRBY, KEYS[1], ARGV[1]) return 1 else return 0 end11.3 发布订阅Pub/Sub命令作用示例PUBLISH channel message发布消息PUBLISH news Hello WorldSUBSCRIBE channel [channel ...]订阅频道SUBSCRIBE newsPSUBSCRIBE pattern [pattern ...]订阅符合模式的频道PSUBSCRIBE news.*UNSUBSCRIBE [channel ...]取消订阅UNSUBSCRIBE newsPUBSUB CHANNELS [pattern]查看活跃频道PUBSUB CHANNELS11.4 管道Pipeline管道不是 Redis 命令而是客户端的技术。它允许一次性发送多条命令减少网络往返次数RTT。使用效果对比场景普通模式Pipeline 模式100 条命令执行100 次网络往返1 次网络往返性能提升—约提升 5-10 倍十二、开发场景速查对照表应用场景推荐数据结构原因缓存对象用户信息、商品信息Hash可单独修改字段无需整体重新设置简单缓存短字符串、Token、SessionString最轻量、最快、支持过期时间计数器阅读数、点赞数、库存StringINCR/DECR原子操作无需加锁排行榜积分榜、销量榜Sorted Set按分数自动排序支持 Top N 查询最新消息列表评论、通知ListLPUSH LRANGE有序可控制保留条数LTRIM消息队列异步任务、日志ListBLPOP/BRPOP或 Stream阻塞式弹出支持生产者-消费者模式标签系统、共同好友、去重Set去重自动支持交集/并集/差集签到、在线状态、布隆过滤器Bitmap节省内存1 个用户/天只需 1 bit独立访客数UV统计HyperLogLog亿级基数极小内存每个 key 约 12KB附近的人、LBS 服务GEO内置地理距离计算和半径查询分布式锁StringSET NX PX原子设置 过期时间防死锁可靠消息队列需持久化、ACKStream支持消费者组、消息确认、回溯十三、总结数据类型一句话用途常用命令典型场景String最通用的键值对SET/GET/INCR缓存、计数器、分布式锁Hash对象存储HSET/HGET/HGETALL用户信息、商品信息List有序列表LPUSH/RPOP/LRANGE消息队列、最新列表Set去重集合SADD/SMEMBERS/SINTER标签、共同好友、抽奖Sorted Set带排序的集合ZADD/ZRANGE/ZREVRANGE排行榜、延迟队列Bitmap位操作SETBIT/GETBIT/BITCOUNT签到、在线状态HyperLogLog基数统计PFADD/PFCOUNTUV 统计GEO地理空间GEOADD/GEORADIUS附近的人Stream持久化消息队列XADD/XREAD/XGROUP可靠消息队列事务批量原子执行MULTI/EXEC/WATCH转账、库存扣减Lua 脚本复杂原子操作EVAL/EVALSHA限流、分布式锁复杂版Pipeline批量命令减少网络往返客户端支持大量写入/读取场景十四、所以 Redis 是一款高性能的内存数据结构服务器 还是数据库Redis 既是“高性能的内存数据结构服务器”也是“数据库”。这两个描述并不矛盾而是从不同维度对 Redis 的定位进行定义。“数据结构服务器”强调它的设计哲学和技术形态“数据库”强调它的功能角色和产品定位。Redis 的官方定义是“数据结构服务器”因为它围绕数据结构提供丰富的操作能力但从功能角色看它具备数据库的所有核心特征完全可以作为数据库使用。更准确的说法是Redis 是一款以内存为核心、数据结构为基础的数据库服务器。