🗝️ 一、通用命令与基础入门
这些命令适用于所有数据类型的键,用于管理和操作Redis键。
1.1 连接与基础操作
| 操作 |
命令 |
说明 |
| 启动Redis服务 |
redis-server [redis.conf] |
启动Redis服务器,可指定配置文件。 |
| 客户端连接 |
redis-cli -h 主机 -p 端口 |
连接到Redis服务器,默认连接本地6379端口。 |
| 测试连通性 |
PING |
若服务器运行正常,返回PONG。 |
| 关闭服务 |
SHUTDOWN |
在redis-cli中执行,安全关闭Redis服务器。 |
| 退出客户端 |
EXIT 或 QUIT |
退出redis-cli客户端。 |
1.2 数据库操作
| 操作 |
命令 |
说明 |
| 切换数据库 |
SELECT index |
Redis默认有16个数据库(0-15),该命令用于切换。 |
| 数据迁移 |
MOVE key db |
将指定的key移动到另一个数据库中。 |
| 清空当前库 |
FLUSHDB |
删除当前数据库中的所有key。 |
| 清空所有库 |
FLUSHALL |
删除所有数据库中的所有key,高危命令,谨慎使用。 |
1.3 Key操作
| 操作 |
命令 |
说明 |
| 查找Key |
KEYS pattern |
查找所有符合给定模式的key。生产环境慎用(KEYS *),可能阻塞服务器。 |
| 判断Key是否存在 |
EXISTS key [key …] |
检查给定key是否存在,返回存在的个数。 |
| 查看Key类型 |
TYPE key |
返回key所储存的值的类型(string, list, set, zset, hash等)。 |
| 删除Key |
DEL key [key …] |
删除指定的key,同步阻塞操作。 |
| 异步删除Key |
UNLINK key [key …] |
与DEL功能类似,但为异步非阻塞操作,效率更高。 |
| 修改Key名称 |
RENAME key newkey |
重命名key,若newkey已存在,则覆盖。 |
| 条件重命名 |
RENAMENX key newkey |
仅当newkey不存在时,才重命名。 |
| 设置过期时间 |
EXPIRE key seconds |
为key设置生存时间(秒)。 |
| 设置过期时间 |
PEXPIRE key milliseconds |
为key设置生存时间(毫秒)。 |
| 设置过期时间点 |
EXPIREAT key timestamp |
设置key的过期UNIX时间戳(秒)。 |
| 查看剩余时间 |
TTL key |
查看key剩余生存时间(秒),返回-1表示永久,-2表示不存在。 |
| 查看剩余时间 |
PTTL key |
查看key剩余生存时间(毫秒)。 |
| 移除过期时间 |
PERSIST key |
移除key的过期时间,使其成为永久key。 |
| 随机返回Key |
RANDOMKEY |
从当前数据库随机返回一个key。 |
| 序列化Key值 |
DUMP key |
序列化给定key,并返回被序列化的值。 |
| 查看Key数量 |
DBSIZE |
返回当前数据库的key总数。 |
🧱 二、基础数据类型命令
2.1 字符串 (String)
字符串是Redis最基础的数据类型,一个键最大可存储512MB的值,且是二进制安全的,可以存储任何数据,如数字、字符串、图片等。
| 操作 |
命令 |
说明 |
| 设置值 |
`SET key value [EX seconds] [PX milliseconds] [NX |
XX]` |
| 获取值 |
GET key |
获取key的值。 |
| 批量设置 |
MSET key value [key value …] |
同时设置多个key-value对。 |
| 批量获取 |
MGET key [key …] |
获取所有(一个或多个)给定key的值。 |
| 条件设置(存在) |
SETNX key value |
仅当key不存在时才设置值,常用于分布式锁。 |
| 带过期时间设置 |
SETEX key seconds value |
设置key的值并同时指定过期时间(秒)。 |
| 设置新值返回旧值 |
GETSET key value |
将key的值设为新值,并返回旧值。注意: Redis 6.2.0后已标记为过时,可用SET key value GET替代。 |
| 追加值 |
APPEND key value |
将value追加到key原值的末尾。 |
| 获取子串 |
GETRANGE key start end |
返回key中字符串值的子字符。 |
| 设置子串 |
SETRANGE key offset value |
用value覆写给定key的字符串值,从偏移量offset开始。 |
| 获取字符串长度 |
STRLEN key |
返回key所储存的字符串值的长度。 |
| 递增 |
INCR key |
将key中储存的数字值加1。 |
| 递减 |
DECR key |
将key中储存的数字值减1。 |
| 按指定值递增 |
INCRBY key increment |
将key所储存的值加上给定的增量值。 |
| 按指定值递减 |
DECRBY key decrement |
将key所储存的值减去给定的减量值。 |
| 浮点数递增 |
INCRBYFLOAT key increment |
将key所储存的值加上给定的浮点增量值。 |
2.2 哈希 (Hash)
Hash是一个键值对集合,适合用于存储对象(如用户信息)。每个Hash可以存储约40亿个字段。
| 操作 |
命令 |
说明 |
| 设置单个字段 |
HSET key field value |
设置哈希表中指定字段的值。 |
| 获取单个字段 |
HGET key field |
获取哈希表中指定字段的值。 |
| 批量设置 |
HMSET key field value [field value …] |
批量设置哈希表中的多个字段值。 |
| 批量获取 |
HMGET key field [field …] |
批量获取哈希表中的多个字段值。 |
| 获取所有字段和值 |
HGETALL key |
返回哈希表中所有的字段和值。生产环境慎用,可能导致阻塞。 |
| 删除字段 |
HDEL key field [field …] |
删除哈希表中的一个或多个字段。 |
| 条件设置 |
HSETNX key field value |
仅当字段不存在时,才设置其值。 |
| 判断字段是否存在 |
HEXISTS key field |
判断哈希表中指定字段是否存在。 |
| 获取字段数量 |
HLEN key |
获取哈希表中字段的数量。 |
| 获取所有字段名 |
HKEYS key |
获取哈希表中的所有字段名。 |
| 获取所有值 |
HVALS key |
获取哈希表中的所有值。 |
| 整数递增 |
HINCRBY key field increment |
为哈希表中指定字段的整数值加上增量。 |
| 浮点数递增 |
HINCRBYFLOAT key field increment |
为哈希表中指定字段的浮点数值加上增量。 |
2.3 列表 (List)
List是一个简单的字符串列表,基于双向链表实现,因此从头部或尾部插入、删除元素都非常快,常用于实现消息队列、时间线等。
| 操作 |
命令 |
说明 |
| 左插入 |
LPUSH key value [value …] |
将一个或多个值插入到列表头部。 |
| 右插入 |
RPUSH key value [value …] |
将一个或多个值插入到列表尾部。 |
| 获取范围 |
LRANGE key start stop |
获取列表指定范围内的元素。0 -1可获取所有元素。 |
| 左弹出 |
LPOP key [count] |
移除并返回列表的头元素。 |
| 右弹出 |
RPOP key [count] |
移除并返回列表的尾元素。 |
| 获取长度 |
LLEN key |
返回列表的长度。 |
| 根据索引获取 |
LINDEX key index |
通过索引获取列表中的元素。 |
| 根据值删除 |
LREM key count value |
根据参数count的值,移除列表中与value相等的元素。 |
| 修剪列表 |
LTRIM key start stop |
只保留列表指定区间内的元素,不在指定区间内的元素都将被删除。 |
| 插入元素 |
LINSERT key BEFORE/AFTER pivot value |
在列表的某个元素(pivot)前或后插入一个新元素。 |
| 阻塞弹出 |
BLPOP key [key …] timeout |
LPOP的阻塞版本,如果列表为空,会阻塞连接直到超时或有元素可弹出。 |
| 源右弹,目标左压 |
RPOPLPUSH source destination |
将source列表的最后一个元素弹出并返回,同时将其插入到destination列表的头部。 |
2.4 集合 (Set)
Set是一个无序且不重复的字符串集合,支持集合间的交、并、差运算,适合用于标签系统、共同好友等场景。
| 操作 |
命令 |
说明 |
| 添加元素 |
SADD key member [member …] |
向集合中添加一个或多个成员。 |
| 删除元素 |
SREM key member [member …] |
移除集合中的一个或多个成员。 |
| 获取所有成员 |
SMEMBERS key |
返回集合中的所有成员。慎用,可能阻塞。 |
| 判断成员是否存在 |
SISMEMBER key member |
判断member元素是否是集合key的成员。 |
| 获取成员数量 |
SCARD key |
返回集合中成员的数量。 |
| 随机获取 |
SRANDMEMBER key [count] |
从集合中随机返回一个或多个元素。 |
| 随机弹出 |
SPOP key [count] |
随机移除并返回集合中的一个或多个元素。 |
| 交集 |
SINTER key [key …] |
返回给定所有集合的交集。 |
| 并集 |
SUNION key [key …] |
返回给定所有集合的并集。 |
| 差集 |
SDIFF key [key …] |
返回第一个集合与其他集合的差集。 |
| 将结果存储 |
SINTERSTORE destination key [key …] |
计算交集并将结果存储到destination中。 |
2.5 有序集合 (Sorted Set / ZSet)
ZSet和Set一样也是字符串的集合,但每个元素都关联一个score(分数),并以此进行排序。常用于排行榜、优先级队列等。
| 操作 |
命令 |
说明 |
| 添加元素 |
ZADD key [NX|XX] [CH] [INCR] score member [score member …] |
向有序集合中添加一个或多个成员,或更新已存在成员的分数。 |
| 删除元素 |
ZREM key member [member …] |
移除有序集合中的一个或多个成员。 |
| 获取数量 |
ZCARD key |
返回有序集合的成员数量。 |
| 获取分数 |
ZSCORE key member |
返回成员的分数值。 |
| 增加分数 |
ZINCRBY key increment member |
为有序集合成员的分数值加上增量increment。 |
| 升序获取 |
ZRANGE key start stop [WITHSCORES] |
按分数值升序返回指定区间内的成员。 |
| 降序获取 |
ZREVRANGE key start stop [WITHSCORES] |
按分数值降序返回指定区间内的成员。 |
| 按分数范围获取 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
按分数值升序返回指定分数范围内的成员。 |
| 按排名删除 |
ZREMRANGEBYRANK key start stop |
移除有序集合中给定的排名区间的所有成员。 |
| 按分数删除 |
ZREMRANGEBYSCORE key min max |
移除有序集合中给定的分数区间的所有成员。 |
🚀 三、高级数据类型与功能命令
3.1 位图 (Bitmap)
Bitmap不是一种独立的数据类型,而是基于String类型实现的位操作,适合用于记录签到、用户在线状态等。
| 操作 |
命令 |
说明 |
| 设置位值 |
SETBIT key offset value |
对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。 |
| 获取位值 |
GETBIT key offset |
对key所储存的字符串值,获取指定偏移量上的位(bit)。 |
| 统计为1的位数 |
BITCOUNT key [start end] |
统计字符串被设置为1的bit数。 |
| 位操作 |
BITOP operation destkey key [key …] |
对一个或多个key执行位操作(AND, OR, XOR, NOT),并将结果保存到destkey。 |
| 查找第一个指定值的位 |
BITPOS key bit [start] [end] |
返回字符串中第一个被设置为1或0的bit的位置。 |
3.2 基数统计 (HyperLogLog)
HyperLogLog是一种概率数据结构,用于以极小的内存(约12KB)对海量数据进行基数统计(去重计数),但结果有0.81%的标准误差。
| 操作 |
命令 |
说明 |
| 添加元素 |
PFADD key element [element …] |
将元素添加到HyperLogLog结构中。 |
| 统计基数 |
PFCOUNT key [key …] |
返回给定HyperLogLog的基数估算值。 |
| 合并 |
PFMERGE destkey sourcekey [sourcekey …] |
将多个HyperLogLog合并为一个,并存储到destkey中。 |
3.3 地理位置 (Geo)
Geo用于处理地理位置信息,其底层实现是有序集合(ZSet),可用于实现附近的人、计算两地距离等功能。
| 操作 |
命令 |
说明 |
| 添加位置 |
GEOADD key longitude latitude member [longitude latitude member …] |
将指定的地理空间位置(经度、纬度、名称)添加到指定的key中。 |
| 计算距离 |
GEODIST key member1 member2 [m|km|ft|mi] |
返回两个给定位置之间的距离。 |
| 获取坐标 |
GEOPOS key member [member …] |
返回一个或多个位置元素的经度和纬度。 |
| 获取Hash |
GEOHASH key member [member …] |
返回一个或多个位置元素的Geohash表示。 |
| 半径查询 |
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] |
以给定的经纬度为中心,返回指定半径内的所有位置元素。 |
| 成员半径查询 |
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] |
以给定成员为中心,返回指定半径内的所有位置元素。 |
3.4 流 (Stream)
Stream是Redis 5.0引入的日志数据结构,用于构建消息队列、事件溯源等场景,支持消费者组。
| 操作 |
命令 |
说明 |
| 添加消息 |
XADD key [NOMKSTREAM] [MAXLEN|MINID [=|~] threshold [LIMIT count]] *|ID field value [field value …] |
向Stream中添加一条消息。使用*可让Redis自动生成ID。 |
| 读取消息 |
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key …] ID [ID …] |
从一个或多个Stream中读取数据,支持阻塞读取。 |
| 范围查询 |
XRANGE key start end [COUNT count] |
返回Stream中指定ID范围内的消息。 |
| 反向范围查询 |
XREVRANGE key end start [COUNT count] |
反向返回Stream中指定ID范围内的消息。 |
| 获取长度 |
XLEN key |
返回Stream中的消息数量。 |
| 删除消息 |
XDEL key ID [ID …] |
从Stream中删除指定ID的消息。 |
| 消费者组 |
XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD entries-read] |
创建消费者组。$表示只消费新消息,0表示消费所有历史消息。 |
| 消费者组读取 |
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key …] ID [ID …] |
消费者组读取消息,>表示从未消费过的消息开始。 |
| 确认消息 |
XACK key group ID [ID …] |
确认消息已处理,将其从pending列表中移除。 |
3.5 JSON (RedisJSON)
RedisJSON模块提供了原生JSON数据类型,可以高效地存储、更新和查询JSON文档。
| 操作 |
命令 |
说明 |
| 设置JSON |
JSON.SET key path json |
在指定路径设置JSON值。 |
| 获取JSON |
JSON.GET key [path] |
获取指定路径的JSON值。 |
| 删除JSON |
JSON.DEL key [path] |
删除指定路径的JSON值。 |
| 追加数组 |
JSON.ARRAPPEND key [path] value [value …] |
向JSON数组末尾追加一个或多个值。 |
| 获取类型 |
JSON.TYPE key [path] |
获取指定路径的JSON值类型。 |
3.6 全文搜索 (RediSearch)
RediSearch模块提供了全文索引、聚合查询和高级搜索功能。
| 操作 |
命令 |
说明 |
| 创建索引 |
FT.CREATE index [ON HASH|JSON] [PREFIX count prefix [prefix …]] SCHEMA field [TEXT|TAG|NUMERIC|GEO] … |
创建全文索引,定义字段及其类型。 |
| 搜索 |
FT.SEARCH index query [NOCONTENT] [VERBATIM] [NOSTOPWORDS] [WITHSCORES] [WITHPAYLOADS] [WITHSORTKEYS] |
执行搜索查询。 |
| 聚合查询 |
FT.AGGREGATE index query |
对搜索结果执行聚合操作(如分组、排序、转换)。 |
| 删除索引 |
FT.DROPINDEX index [DD] |
删除索引,DD选项会同时删除所有关联的文档。 |
| 添加文档 |
HSET doc_key field value … |
索引创建后,向关联的Hash或JSON键添加数据即可自动索引。 |
3.7 时序数据 (RedisTimeSeries)
RedisTimeSeries模块专为处理时序数据(如IoT传感器数据、监控指标)而设计。
| 操作 |
命令 |
说明 |
| 创建时间序列 |
TS.CREATE key [RETENTION retentionPeriod] [ENCODING enc] [CHUNK_SIZE size] [DUPLICATE_POLICY policy] [LABELS label value …] |
创建一个新的时间序列。 |
| 添加数据点 |
TS.ADD key timestamp value [RETENTION retentionPeriod] [ENCODING enc] [CHUNK_SIZE size] [ON_DUPLICATE policy] [LABELS label value …] |
向时间序列中添加一个数据点。 |
| 范围查询 |
TS.RANGE key fromTimestamp toTimestamp [LATEST] [FILTER_BY_TS ts…] [FILTER_BY_VALUE min max] [COUNT count] [ALIGN value] [AGGREGATION aggType bucketDuration] |
查询指定时间范围内的数据点。 |
| 获取最新值 |
TS.GET key [LATEST] |
获取时间序列的最新值。 |
| 聚合查询 |
TS.MRANGE fromTimestamp toTimestamp [LATEST] [FILTER filter] [COUNT count] [ALIGN value] [AGGREGATION aggType bucketDuration] [WITHLABELS] [GROUPBY label [REDUCE reducer]] |
在多个时间序列上执行聚合范围查询。 |
⚙️ 四、核心机制与运维命令
4.1 发布与订阅 (Pub/Sub)
Redis发布订阅是一种消息通信模式,发送者发布消息,订阅者接收消息,但消息不会持久化。
| 操作 |
命令 |
说明 |
| 订阅频道 |
SUBSCRIBE channel [channel …] |
订阅一个或多个频道。 |
| 发布消息 |
PUBLISH channel message |
向指定频道发布一条消息。 |
| 取消订阅 |
UNSUBSCRIBE [channel [channel …]] |
退订指定频道,不带参数则退订所有频道。 |
| 模式订阅 |
PSUBSCRIBE pattern [pattern …] |
订阅与给定模式匹配的频道。 |
| 查看订阅 |
PUBSUB CHANNELS [pattern] |
列出当前活跃的频道。 |
4.2 事务 (Transactions)
Redis事务通过MULTI、EXEC、DISCARD和WATCH命令实现,可以一次性执行多个命令,但不支持回滚。
| 操作 |
命令 |
说明 |
| 开启事务 |
MULTI |
标记一个事务块的开始。 |
| 执行事务 |
EXEC |
执行事务队列中的所有命令。 |
| 取消事务 |
DISCARD |
取消事务,清空命令队列。 |
| 监视Key |
WATCH key [key …] |
在事务开始前监视一个或多个key。若在EXEC执行前key被修改,则事务中止。 |
| 取消监视 |
UNWATCH |
取消对所有key的监视。 |
4.3 Lua脚本 (Scripting)
通过EVAL命令,可以将Lua脚本发送到Redis服务器执行,保证脚本内命令的原子性。
| 操作 |
命令 |
说明 |
| 执行脚本 |
EVAL script numkeys key [key …] arg [arg …] |
执行Lua脚本,numkeys指定键名参数个数。 |
| 通过SHA执行 |
EVALSHA sha1 numkeys key [key …] arg [arg …] |
根据缓存中脚本的SHA1校验和来执行脚本,可减少带宽。 |
| 加载脚本 |
SCRIPT LOAD script |
将脚本加载到脚本缓存,但不执行,返回SHA1校验和。 |
| 检查脚本是否存在 |
SCRIPT EXISTS sha1 [sha1 …] |
检查一个或多个脚本是否在缓存中。 |
| 清空脚本缓存 |
SCRIPT FLUSH [ASYNC|SYNC] |
清空所有脚本缓存。 |
4.4 持久化 (Persistence)
Redis提供了RDB和AOF两种持久化机制。
| 操作 |
命令 |
说明 |
| 同步保存RDB |
SAVE |
同步生成RDB快照,会阻塞主线程,生产环境不建议使用。 |
| 异步保存RDB |
BGSAVE |
在后台异步生成RDB快照,由子进程执行,不阻塞主线程。 |
| 获取上次保存时间 |
LASTSAVE |
返回最近一次成功将数据保存到磁盘的UNIX时间戳。 |
| 重写AOF文件 |
BGREWRITEAOF |
在后台异步重写AOF文件,优化其体积。 |
4.5 集群与高可用 (Cluster&Sentinel)
用于管理Redis集群和Sentinel哨兵模式。
| 操作 |
命令 |
说明 |
| 主从复制 |
SLAVEOF host port / REPLICAOF host port |
将当前服务器设置为指定主服务器的从节点。 |
| 查看集群信息 |
CLUSTER INFO |
返回集群的基本状态信息。 |
| 查看集群节点 |
CLUSTER NODES |
列出集群中所有节点的详细信息。 |
| 分配槽 |
CLUSTER ADDSLOTS slot [slot …] |
将指定的哈希槽分配给当前节点。 |
| 查看Sentinel监控的主节点 |
SENTINEL MASTERS |
列出被Sentinel监控的所有主节点信息。 |
| 获取主节点地址 |
SENTINEL GET-MASTER-ADDR-BY-NAME master-name |
根据主节点名称获取其地址。 |
4.6 系统管理与监控 (Server Management)
用于查看服务器状态、管理客户端连接等。
| 操作 |
命令 |
说明 |
| 查看服务器信息 |
INFO [section] |
返回服务器状态信息,如内存、CPU、持久化、复制等。 |
| 查看客户端列表 |
CLIENT LIST |
列出所有已连接的客户端信息。 |
| 关闭客户端连接 |
CLIENT KILL [ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [USER username] [ADDR ip:port] [LADDR ip:port] [SKIPME yes|no] |
关闭指定的客户端连接。 |
| 监控命令执行 |
MONITOR |
实时打印服务器收到的所有命令,生产环境慎用。 |
| 慢查询日志 |
SLOWLOG GET [count] |
返回最近count条执行时间超过slowlog-log-slower-than设置的命令。 |
| 重置慢查询日志 |
SLOWLOG RESET |
清空慢查询日志。 |
| 配置管理 |
CONFIG GET parameter / CONFIG SET parameter value / CONFIG REWRITE |
获取、设置或重写Redis配置文件中的参数。 |
| 内存诊断 |
MEMORY DOCTOR |
分析内存使用情况并给出建议。 |
| 内存使用分析 |
MEMORY USAGE key [SAMPLES count] |
估算key的内存使用情况。 |
4.7 客户端管理 (Client Management)
| 操作 |
命令 |
说明 |
| 设置客户端名称 |
CLIENT SETNAME connection-name |
为当前连接设置一个名称。 |
| 获取客户端名称 |
CLIENT GETNAME |
返回当前连接设置的名称。 |
| 暂停客户端命令 |
CLIENT PAUSE timeout [WRITE|ALL] |
在指定时间内暂停处理客户端的命令。 |
| 解除暂停 |
CLIENT UNPAUSE |
立即解除客户端的暂停状态。 |
| 回复跟踪 |
CLIENT TRACKING ON|OFF [REDIRECT client-id] [PREFIX prefix [PREFIX prefix …]] [BCAST] [OPTIN] [OPTOUT] [NOLOOP] |
启用/禁用客户端缓存跟踪功能。 |
以上内容主要基于Redis 6.0到8.0版本的常用命令,部分高级模块(如JSON、Search、TimeSeries)的功能可能因版本和部署环境而异。