Redis 数据库语法速查表:全景梳理

Redis 数据库语法速查表:全景梳理

Redis 是一款高性能的内存数据结构服务器,广泛应用于缓存、消息队列、分布式锁、实时分析等场景。本文以速查表的形式,从全局命令、数据类型(String、Hash、List、Set、Sorted Set、Bitmap、HyperLogLog、GEO、Stream)到高级功能(事务、Lua脚本、发布订阅、管道),进行全景式梳理。

核心速记:Redis 是“数据结构服务器”,每个数据类型都有特定的使用场景。SET/GET只是开始,ZADDSINTERBITCOUNT才是精华。

一、全局通用命令

命令作用示例
KEYS pattern查找所有匹配的 key(生产环境慎用,可能阻塞)KEYS user:*
SCAN cursor [MATCH pattern] [COUNT count]推荐,迭代 key,不阻塞SCAN 0 MATCH user:* COUNT 100
EXISTS key [key ...]判断 key 是否存在EXISTS user:1001
TYPE key查看 key 的数据类型TYPE user:1001hash
DEL key [key ...]删除一个或多个 keyDEL user:1001
UNLINK key [key ...]异步删除(非阻塞)UNLINK big:key
EXPIRE key seconds设置过期时间(秒)EXPIRE session:abc 3600
PEXPIRE key milliseconds设置过期时间(毫秒)PEXPIRE session:abc 3600000
TTL key查看剩余存活时间(秒)TTL session:abc3600
PTTL key查看剩余存活时间(毫秒)PTTL session:abc3600000
PERSIST key移除过期时间,使 key 永久有效PERSIST session:abc
RENAME key newkey重命名 keyRENAME old:user new:user
RENAMENX key newkey仅当新 key 不存在时重命名RENAMENX old:user new:user
DBSIZE返回当前数据库 key 的数量DBSIZE
FLUSHDB清空当前数据库FLUSHDB
FLUSHALL清空所有数据库FLUSHALL
SELECT index切换数据库(0-15,默认 16 个)SELECT 1
INFO [section]获取 Redis 服务器信息INFO memory

二、String(字符串)

本质:存储二进制安全的字符串(最大 512MB),支持整数自增/自减、位操作。是 Redis 最基础的数据结构。

命令作用示例
SET key value [EX seconds] [PX ms] [NX|XX]设置字符串(支持过期时间和 NX/XX)SET user:1001:name "张三" EX 600
GET key获取字符串GET user:1001:name
MSET key value [key value ...]批量设置MSET user:1001:name "张三" user:1001:age 28
MGET key [key ...]批量获取MGET user:1001:name user:1001:age
SETNX key value仅当 key 不存在时设置(用于分布式锁)SETNX lock:order:1001 1
SETEX key seconds value设置值并指定过期时间(秒)SETEX session:abc 3600 "user_id=1001"
PSETEX key ms value设置值并指定过期时间(毫秒)PSETEX session:abc 3600000 "user_id=1001"
GETSET key value设置新值,返回旧值(原子操作)GETSET counter 10
INCR key自增 1INCR page:view:home
INCRBY key increment自增指定数值INCRBY product:stock:1001 5
DECR key自减 1DECR product:stock:1001
DECRBY key decrement自减指定数值DECRBY product:stock:1001 3
INCRBYFLOAT key increment浮点数自增INCRBYFLOAT account:balance 0.5
APPEND key value追加内容APPEND user:1001:desc ",有 5 年经验"
STRLEN key获取字符串长度STRLEN user:1001:name
GETRANGE 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 name
HGETALL key获取所有字段和值HGETALL user:1001
HMGET key field [field ...]批量获取字段HMGET user:1001 name age
HMSET key field value [field value ...]批量设置(已弃用,用 HSET 替代)
HINCRBY key field increment字段自增HINCRBY user:1001 age 1
HINCRBYFLOAT key field increment字段浮点数自增HINCRBYFLOAT user:1001 salary 500.5
HDEL key field [field ...]删除字段HDEL user:1001 age
HEXISTS key field判断字段是否存在HEXISTS user:1001 name
HLEN key获取字段数量HLEN user:1001
HKEYS key获取所有字段名HKEYS user:1001
HVALS key获取所有字段值HVALS user:1001
HSCAN 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:00"
RPUSH key value [value ...]右侧(尾部)插入一个或多个元素RPUSH logs "2026-01-01 10:00:00"
LPOP key [count]左侧弹出元素LPOP logs
RPOP key [count]右侧弹出元素RPOP logs
LRANGE key start stop获取指定范围元素LRANGE logs 0 9(最新 10 条)
LINDEX key index获取指定索引元素LINDEX logs 0
LSET key index value设置指定索引的值LSET logs 0 "new message"
LINSERT key BEFORE|AFTER pivot value在指定元素前后插入LINSERT logs BEFORE "old" "new"
LLEN key获取列表长度LLEN logs
LREM key count value移除指定数量的指定值LREM logs 2 "error"(移除 2 个 error)
LTRIM key start stop裁剪列表(保留指定范围)LTRIM logs 0 99(保留前 100 条)
RPOPLPUSH source destination从右弹出,从左插入(原子操作)RPOPLPUSH queue:processing queue:done
BLPOP 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" "database"
SREM key member [member ...]移除一个或多个成员SREM tags:article:1001 "database"
SMEMBERS key获取所有成员SMEMBERS tags:article:1001
SISMEMBER key member判断是否集合成员SISMEMBER tags:article:1001 "redis"
SCARD key获取集合基数(元素数量)SCARD tags:article:1001
SPOP key [count]随机弹出元素SPOP lucky:draw
SRANDMEMBER key [count]随机获取成员(不删除)SRANDMEMBER lucky:draw 3
SINTER key [key ...]交集SINTER tags:article:1001 tags:article:1002
SUNION key [key ...]并集SUNION tags:article:1001 tags:article:1002
SDIFF key [key ...]差集SDIFF tags:article:1001 tags:article:1002
SINTERSTORE destination key [key ...]交集存储到新 keySINTERSTORE common:tags tags:a tags:b
SSCAN 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 "Bob"
ZREM key member [member ...]移除成员ZREM rank "Bob"
ZSCORE key member获取成员分数ZSCORE rank "Alice"
ZINCRBY key increment member成员分数增加ZINCRBY rank 5 "Alice"
ZCARD key获取成员数量ZCARD rank
ZCOUNT key min max统计分数区间成员数ZCOUNT rank 90 100
ZRANK key member获取排名(升序,0 开始)ZRANK rank "Alice"
ZREVRANK key member获取排名(降序)ZREVRANK rank "Alice"
ZRANGE key start stop [WITHSCORES]按排名范围获取成员(升序)ZRANGE rank 0 2 WITHSCORES
ZREVRANGE key start stop [WITHSCORES]按排名范围获取成员(降序)ZREVRANGE rank 0 2 WITHSCORES
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]按分数范围获取成员ZRANGEBYSCORE rank 90 100 WITHSCORES
ZREVRANGEBYSCORE key max min [WITHSCORES]按分数范围获取(降序)ZREVRANGEBYSCORE rank 100 90 WITHSCORES
ZREMRANGEBYRANK key start stop按排名范围移除ZREMRANGEBYRANK rank 0 1
ZREMRANGEBYSCORE key min max按分数范围移除ZREMRANGEBYSCORE rank 80 85
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]多个有序集合的并集ZUNIONSTORE all:rank 2 rank:day1 rank:day2
ZINTERSTORE 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 1
GETBIT key offset获取某一位的值GETBIT sign:user:1001:2026-01 0
BITCOUNT key [start end]统计 1 的个数BITCOUNT sign:user:1001:2026-01
BITPOS key bit [start] [end]查找第一个 0/1 的位置BITPOS sign:user:1001:2026-01 0
BITOP operation destkey key [key ...]位运算(AND/OR/XOR/NOT)BITOP AND week:active active:mon active:tue

八、HyperLogLog(基数统计)

本质:概率数据结构,误差约 0.81%,适合独立访客数(UV)统计等需要去重计数的场景。每个 key 固定占用约 12KB 内存。

命令作用示例
PFADD key element [element ...]添加元素PFADD uv:2026-01-01 "user1001" "user1002"
PFCOUNT key [key ...]获取基数(去重计数)PFCOUNT uv:2026-01-01
PFMERGE 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/ft)GEODIST locations "天安门" "故宫" km
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [COUNT count]查询半径内的成员GEORADIUS locations 116.397 39.907 5 km WITHDIST
GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [COUNT count]以成员为中心查询GEORADIUSBYMEMBER locations "天安门" 5 km

十、Stream(消息流)

本质:Redis 5.0 引入的持久化消息队列,支持消费者组、消息确认、消息回溯,是 Redis 中最完善的消息队列方案。

命令作用示例
XADD key ID field value [field value ...]添加消息(*表示自动生成 ID)XADD events * type "login" user "1001"
XLEN key获取 Stream 长度XLEN events
XRANGE key start end [COUNT count]查询消息范围XRANGE events - + COUNT 10
XREVRANGE key end start [COUNT count]反向查询消息XREVRANGE events + - COUNT 10
XREAD COUNT count STREAMS key ID读取消息(阻塞/非阻塞)XREAD BLOCK 0 STREAMS events $
XGROUP CREATE key group ID [MKSTREAM]创建消费者组XGROUP CREATE events processors 0
XREADGROUP 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开启事务MULTI
EXEC执行事务EXEC
DISCARD取消事务DISCARD
WATCH key [key ...]监视 key(乐观锁)WATCH user:1001:balance
UNWATCH取消监视UNWATCH

redis

MULTI SET user:1001:name "张三" SET user:1001:age 28 EXEC

11.2 Lua 脚本

命令作用示例
EVAL script numkeys key [key ...] arg [arg ...]执行 Lua 脚本EVAL "return redis.call('GET', KEYS[1])" 1 user:1001:name
EVALSHA sha1 numkeys key [key ...] arg [arg ...]执行缓存的脚本EVALSHA "sha1" 1 user:1001:name
SCRIPT 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 end

11.3 发布订阅(Pub/Sub)

命令作用示例
PUBLISH channel message发布消息PUBLISH news "Hello World"
SUBSCRIBE channel [channel ...]订阅频道SUBSCRIBE news
PSUBSCRIBE pattern [pattern ...]订阅符合模式的频道PSUBSCRIBE news.*
UNSUBSCRIBE [channel ...]取消订阅UNSUBSCRIBE news
PUBSUB CHANNELS [pattern]查看活跃频道PUBSUB CHANNELS

11.4 管道(Pipeline)

管道不是 Redis 命令,而是客户端的技术。它允许一次性发送多条命令,减少网络往返次数(RTT)。

使用效果对比:

场景普通模式Pipeline 模式
100 条命令执行100 次网络往返1 次网络往返
性能提升约提升 5-10 倍

十二、开发场景速查对照表

应用场景推荐数据结构原因
缓存对象(用户信息、商品信息)Hash可单独修改字段,无需整体重新设置
简单缓存(短字符串、Token、Session)String最轻量、最快、支持过期时间
计数器(阅读数、点赞数、库存)String(INCR/DECR)原子操作,无需加锁
排行榜(积分榜、销量榜)Sorted Set按分数自动排序,支持 Top N 查询
最新消息列表(评论、通知)List(LPUSH + LRANGE)有序,可控制保留条数(LTRIM)
消息队列(异步任务、日志)List(BLPOP/BRPOP)或 Stream阻塞式弹出,支持生产者-消费者模式
标签系统、共同好友、去重Set去重自动,支持交集/并集/差集
签到、在线状态、布隆过滤器Bitmap节省内存(1 个用户/天只需 1 bit)
独立访客数(UV)统计HyperLogLog亿级基数,极小内存(每个 key 约 12KB)
附近的人、LBS 服务GEO内置地理距离计算和半径查询
分布式锁String(SET NX PX)原子设置 + 过期时间,防死锁
可靠消息队列(需持久化、ACK)Stream支持消费者组、消息确认、回溯

十三、总结

数据类型一句话用途常用命令典型场景
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 是一款以内存为核心、数据结构为基础的数据库服务器。