一.通用命令
目录
1. 键管理
// 删除一个或多个键 例: DEL mykey1 mykey2
DEL key [key ...]
// 检查键是否存在,返回 1 表示存在,0 表示不存在
EXISTS key
// 查找所有符合给定模式(pattern)的键
// 例: KEYS user:* (查找所有以 user: 开头的键)
KEYS pattern
// 重命名键 例: RENAME oldkey newkey
RENAME key newkey
// 仅当新键名不存在时,重命名键
RENAMENX key newkey
// 返回键存储的数据类型 例: TYPE mykey (返回 string、list、hash、set、zset 等)
TYPE key
// 增量迭代键空间,适合处理大量键 例: SCAN 0 MATCH user:* COUNT 10
SCAN cursor [MATCH pattern] [COUNT count]
// 对列表、集合或有序集合中的元素进行排序
SORT key
// 查看键的内部信息(如引用计数、编码方式等)
// 例: OBJECT REFCOUNT mykey
OBJECT subcommand key
// 查看键占用的内存大小
MEMORY USAGE key
SCAN 0 MATCH user:* COUNT 10
是 Redis 中用于增量迭代键空间的命令。它的作用是逐步遍历数据库中符合 user:*
模式的键,每次返回最多 10 个键。以下是该命令的详细说明:
-
SCAN
:用于增量迭代键空间,适合处理大量键,避免一次性返回所有键导致性能问题。 -
0
:游标(cursor),表示开始迭代。每次调用SCAN
后,Redis 会返回一个新的游标,用于下一次迭代。 -
MATCH user:*
:指定匹配模式,只返回符合user:*
模式的键。 -
COUNT 10
:指定每次迭代返回的键数量(近似值)。Redis 可能会返回多于或少于 10 个键。
2.过期时间管理
// 为键设置过期时间(以秒为单位) 例: EXPIRE mykey 60 (60 秒后过期)
EXPIRE key seconds
// 为键设置过期时间(以 UNIX 时间戳为单位) 例: EXPIREAT mykey 1672502400 (在指定时间戳过期)
EXPIREAT key timestamp
// 为键设置过期时间(以毫秒为单位)
PEXPIRE key milliseconds
// 获取键的剩余生存时间(以秒为单位)返回 -2 表示键不存在,-1 表示键没有设置过期时间。
TTL key
// 获取键的剩余生存时间(以毫秒为单位)
PTTL key
// 移除键的过期时间,使其永久有效
PERSIST key
// 更新键的最后访问时间,但不修改其值或过期时间
TOUCH key [key ...]
// 配置 notify-keyspace-events 来启用过期事件通知
CONFIG SET notify-keyspace-events Ex
3.数据操作
// 序列化键的值,返回序列化后的数据
DUMP key
// 将 DUMP 命令序列化的值恢复到指定键
// 例: RESTORE newkey 0 "\x00\x03foo\x06\x00\xf0\x12\x34\x56\x78\x9a"
// 后面这一长串就是用dump命令得到的
RESTORE key ttl serialized-value
// 将键移动到另一个数据库 例: MOVE mykey 1
MOVE key db
// 将键复制到另一个键
COPY key newkey
4.服务器管理
// 清空当前数据库中的所有键
FLUSHDB
// 清空所有数据库中的所有键
FLUSHALL
// 切换到指定的数据库(Redis 默认有 16 个数据库,索引从 0 到 15)
SELECT index
// 返回当前数据库中的键数量
DBSIZE
5.调试与性能
// 测试与 Redis 服务器的连接是否正常。返回 PONG 表示连接正常
PING
// 回显指定的消息
ECHO message
// 返回当前服务器时间(以秒和微秒为单位)
TIME
// 查看慢查询日志
SLOWLOG GET 10 (获取最近的 10 条慢查询记录)
SLOWLOG LEN (获取当前慢查询日志中的记录数量)
SLOWLOG RESET (清空慢查询日志中的所有记录)
6.事务与脚本
// 开启事务
MULTI
// 执行事务中的所有命令
EXEC
// 取消事务
DISCARD
// 执行Lua脚本
// 例: EVAL "return redis.call('GET', KEYS[1])" 1 mykey
EVAL script numkeys key [key ...] arg [arg ...]
7.持久化
// 同步保存数据到磁盘
SAVE
// 异步保存数据到磁盘
BGSAVE
// 返回最后一次成功保存数据的时间戳
LASTSAVE
二.字符串(string)
Redis 的字符串(String)是最基本的数据类型,可以存储文本、数字或二进制数据。字符串类型的值最大可以存储 512MB 的数据。
// 设置键值对
SET key value
// 仅当键不存在时设置键值对
SETNX key value
// 设置键值对,并指定过期时间(以秒为单位)
SETEX key seconds value
// 设置键值对,并指定过期时间(以毫秒为单位)
PSETEX key milliseconds value
// 同时设置多个键值对
MSET key value [key value ...]
// 仅当所有键都不存在时,设置多个键值对
MSETNX key value [key value ...]
// 获取键对应的值
GET key
// 获取多个键的值
MGET key [key ...]
// 设置键的新值,并返回旧值
GETSET key value
// 获取键的值的子字符串(从 start 到 end)
// 例: GETRANGE mykey 0 4
GETRANGE key start end
// 获取键的值的长度
STRLEN key
// 将值追加到键的现有值末尾
APPEND key value
// 从指定偏移量开始,覆盖键的值
SETRANGE key offset value
// 将键的值加 1(值必须是整数)
INCR key
// 将键的值减 1(值必须是整数)
DECR key
// 将键的值增加指定的整数
INCRBY key increment
// 将键的值减少指定的整数
DECRBY key decrement
// 将键的值增加指定的浮点数
INCRBYFLOAT key increment
// 对多个键的值进行位运算(AND、OR、XOR、NOT),并将结果存储到 destkey
BITOP operation destkey key [key ...]
// 计算两个字符串的最长公共子序列(LCS)
STRALGO LCS key1 key2
三.列表(list)
Redis 的列表(List)是一个有序的字符串集合,基于双向链表实现。它支持从头部或尾部插入和删除元素,适合用作队列(FIFO)或栈(LIFO)。
// 将一个或多个值插入到列表的头部
LPUSH key value [value ...]
// 将一个或多个值插入到列表的尾部
RPUSH key value [value ...]
// 仅当列表存在时,将一个值插入到列表的头部
LPUSHX key value
// 仅当列表存在时,将一个值插入到列表的尾部
RPUSHX key value
// 在列表中指定元素的前面或后面插入一个新元素
// 例: LINSERT mylist BEFORE "World" "There"
LINSERT key BEFORE|AFTER pivot value
// 移除并返回列表的第一个元素
LPOP key
// 移除并返回列表的最后一个元素
RPOP key
// 移除源列表的最后一个元素,并将其插入到目标列表的头部
RPOPLPUSH source destination
// 阻塞式移除并返回列表的第一个元素。如果列表为空,会阻塞直到超时或有元素可弹出
// 例: BLPOP mylist 10
BLPOP key [key ...] timeout
// 阻塞式移除并返回列表的最后一个元素。如果列表为空,会阻塞直到超时或有元素可弹出
BRPOP key [key ...] timeout
// 阻塞式移除源列表的最后一个元素,并将其插入到目标列表的头部。如果列表为空,会阻塞直到超时或有元素可弹出
BRPOPLPUSH source destination timeout
// 移除列表中指定数量的匹配元素
LREM key count value
// 获取列表中指定范围的元素
LRANGE key start stop
// 获取列表中指定索引位置的元素
LINDEX key index
// 获取列表的长度
LLEN key
// 设置列表中指定索引位置的元素值
LSET key index value
// 修剪列表,只保留指定范围内的元素
LTRIM key start stop
// 将元素从一个列表移动到另一个列表
LMOVE source destination LEFT|RIGHT LEFT|RIGHT
四.集合(set)
Redis 的集合(Set)是一个无序且不重复的字符串集合。它支持高效的添加、删除、查找操作,并且可以执行集合的交集、并集、差集等运算。
// 向集合中添加一个或多个成员
SADD key member [member ...]
// 从集合中移除一个或多个成员
SREM key member [member ...]
// 随机移除并返回集合中的一个或多个成员
SPOP key [count]
// 获取集合中的所有成员
SMEMBERS key
// 随机返回集合中的一个或多个成员(不删除)
SRANDMEMBER key [count]
// 检查成员是否在集合中
SISMEMBER key member
// 获取集合的成员数量
SCARD key
// 返回多个集合的交集
SINTER key [key ...]
// 计算多个集合的交集,并将结果存储到目标集合中
SINTERSTORE destination key [key ...]
// 返回多个集合的并集
SUNION key [key ...]
// 计算多个集合的并集,并将结果存储到目标集合中
SUNIONSTORE destination key [key ...]
// 返回多个集合的差集(以第一个集合为基准)
SDIFF key [key ...]
// 计算多个集合的差集,并将结果存储到目标集合中
SDIFFSTORE destination key [key ...]
// 将成员从源集合移动到目标集合
// 例: SMOVE set1 set2 "Hello"
SMOVE source destination member
// 增量迭代集合中的成员, 和通用命令中的差不多
SSCAN key cursor [MATCH pattern] [COUNT count]
五.有序集合(sorted set)
Redis 的有序集合(Sorted Set / ZSet)是一个有序的字符串集合,每个元素关联一个分数(score),用于排序。有序集合结合了集合和列表的特性,既保证了元素的唯一性,又支持按分数排序和范围查询。
// 向有序集合中添加一个或多个成员
// NX: 仅当成员不存在时添加
// XX: 仅当成员存在时更新
// CH: 返回被修改的成员数量(包括新增和更新)
// INCR: 将成员的分数增加指定值(类似 ZINCRBY)
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
// 从有序集合中移除一个或多个成员
ZREM key member [member ...]
// 移除有序集合中指定排名范围的成员 (0是分数最小的)
ZREMRANGEBYRANK key start stop
// 移除有序集合中指定分数范围的成员
ZREMRANGEBYSCORE key min max
// 获取有序集合中指定排名范围的成员(按分数从小到大排序)
// WITHSCORES:返回成员及其分数
ZRANGE key start stop [WITHSCORES]
// 获取有序集合中指定排名范围的成员(按分数从大到小排序)
ZREVRANGE key start stop [WITHSCORES]
// 获取有序集合中指定分数范围的成员(按分数从小到大排序)
// LIMIT offset count 用于分页查询或限制返回结果的数量
// offset: 跳过的成员数量 count: 返回的成员数量
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
// 获取有序集合中指定分数范围的成员(按分数从大到小排序)
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
// 增量迭代有序集合中的成员
ZSCAN key cursor [MATCH pattern] [COUNT count]
// 获取成员在有序集合中的排名(按分数从小到大排序,从 0 开始)
ZRANK key member
// 获取成员在有序集合中的排名(按分数从大到小排序,从 0 开始)
ZREVRANK key member
// 获取成员的分数
ZSCORE key member
// 获取有序集合的成员数量
ZCARD key
// 统计有序集合中指定分数范围的成员数量
ZCOUNT key min max
// 计算多个有序集合的交集,并将结果存储到目标有序集合中
// 为每个有序集合的分数设置权重, 权重是一个浮点数,默认值为1, 权重会与每个有序集合中成员的分数相乘, 权重的数量必须与 numkeys 一致
// 指定交集结果的分数聚合方式: SUM: 将成员的分数相加(默认行为), MIN: 取成员的最小分数, MAX: 取成员的最大分数
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
// 计算多个有序集合的并集,并将结果存储到目标有序集合中
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
// 移除并返回有序集合中分数最小的成员(默认 1 个)
ZPOPMIN key [count]
// 移除并返回有序集合中分数最大的成员(默认 1 个)
ZPOPMAX key [count]
// 阻塞式移除并返回有序集合中分数最小的成员
BZPOPMIN key [key ...] timeout
// 阻塞式移除并返回有序集合中分数最大的成员
BZPOPMAX key [key ...] timeout
六.哈希表(hash)
Redis 的哈希表(Hash)是一个键值对集合,适合存储对象或结构化数据。每个哈希表可以存储多个字段和值,字段和值都是字符串类型
// 设置哈希表中一个或多个字段的值
HSET key field value [field value ...]
// 仅当字段不存在时,设置哈希表中字段的值
HSETNX key field value
// 获取哈希表中字段的值
HGET key field
// 获取哈希表中多个字段的值
HMGET key field [field ...]
// 获取哈希表中的所有字段和值
HGETALL key
// 获取哈希表中的所有字段
HKEYS key
// 获取哈希表中的所有值
HVALS key
// 删除哈希表中的一个或多个字段
HDEL key field [field ...]
// 检查哈希表中是否存在指定字段
HEXISTS key field
// 获取哈希表中字段的数量
HLEN key
// 获取哈希表中字段值的长度
HSTRLEN key field
// 将哈希表中字段的值增加指定的整数
HINCRBY key field increment
// 将哈希表中字段的值增加指定的浮点数
HINCRBYFLOAT key field increment
// 增量迭代哈希表中的字段和值, 同上
HSCAN key cursor [MATCH pattern] [COUNT count]
七.HyperLogLog
HyperLogLog 是一种用于基数统计(估算集合中不重复元素的数量)的数据结构。
// 向 HyperLogLog 中添加元素
PFADD key element [element ...]
// 统计 HyperLogLog 中不重复元素的数量
PFCOUNT key [key ...]
// 将多个 HyperLogLog 合并到一个目标 HyperLogLog 中
PFMERGE destkey sourcekey [sourcekey ...]
八.发布/订阅(Pub/Sub)
Redis 的发布/订阅(Pub/Sub)是一种消息通信模式,允许客户端通过频道(channel)发布和订阅消息。发布者将消息发送到频道,订阅者可以接收并处理这些消息。Redis 的发布/订阅模式非常适合实现实时消息通知、事件驱动架构等场景。
// 向指定频道发布消息
PUBLISH channel message
// 订阅一个或多个频道
SUBSCRIBE channel [channel ...]
// 订阅与模式匹配的频道
PSUBSCRIBE pattern [pattern ...]
// 取消订阅一个或多个频道
UNSUBSCRIBE [channel [channel ...]]
// 取消订阅与模式匹配的频道
PUNSUBSCRIBE [pattern [pattern ...]]
九.模块(Module)
Redis 模块(Module)是 Redis 的一种扩展机制,允许开发者通过加载外部模块来扩展 Redis 的功能。模块可以添加新的数据类型、命令和功能,从而满足特定的业务需求。Redis 模块使用 C 语言编写,并通过 Redis 提供的 API 与 Redis 核心进行交互。
// 加载指定路径的模块
// 例: MODULE LOAD /path/to/mymodule.so
MODULE LOAD path
// 列出已加载的模块
MODULE LIST
// 卸载指定名称的模块
MODULE UNLOAD name