Loading...

文章背景图

Redis

2025-06-23
0
-
- 分钟
|

🗝️ 一、通用命令与基础入门

这些命令适用于所有数据类型的键,用于管理和操作Redis键。

1.1 连接与基础操作

操作

命令

说明

启动Redis服务

redis-server [redis.conf]

启动Redis服务器,可指定配置文件。

客户端连接

redis-cli -h 主机 -p 端口

连接到Redis服务器,默认连接本地6379端口。

测试连通性

PING

若服务器运行正常,返回PONG

关闭服务

SHUTDOWN

在redis-cli中执行,安全关闭Redis服务器。

退出客户端

EXITQUIT

退出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事务通过MULTIEXECDISCARDWATCH命令实现,可以一次性执行多个命令,但不支持回滚。

操作

命令

说明

开启事务

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)的功能可能因版本和部署环境而异。

评论交流

文章目录