Redis(Remote Dictionary Server)作为一个高性能的键值存储系统,其强大的功能很大程度上得益于丰富多样的命令集,这些命令涵盖了数据操作、服务器管理、集群配置等多个方面,使得Redis能够满足从简单缓存到复杂业务逻辑的多样化需求,下面将详细介绍Redis的核心命令,涵盖不同数据类型及其操作。

从最基础的键(Key)操作开始,键是Redis中数据的基本标识符,对键的管理是使用Redis的第一步。KEYS pattern
命令用于查找所有符合给定模式pattern的键,例如KEYS user:*
会查找所有以"user:"开头的键,需要注意的是,KEYS
命令会阻塞服务器,在生产环境中应谨慎使用,尤其是在键数量较多时,为了更高效地查找,推荐使用SCAN cursor [MATCH pattern] [COUNT count]
命令,它基于游标进行迭代式查找,避免了阻塞。EXISTS key
用于检查键是否存在,存在则返回1,否则返回0。TYPE key
返回键所存储的值的类型,如string、hash、list、set、zset等。DEL key [key ...]
用于删除一个或多个键,删除成功返回被删除键的数量。TTL key
返回键的剩余生存时间(以秒为单位),当键不存在或没有设置过期时间时返回-1。EXPIRE key seconds
为键设置过期时间,单位为秒,例如EXPIRE mykey 60
表示mykey
将在60秒后自动删除。PERSIST key
移除键的过期时间,使其永不过期。
接下来是字符串(String)类型相关的命令,String是Redis最基本的数据类型,可以存储文本、JSON、序列化对象或二进制数据(最大512MB)。SET key value [EX seconds|PX milliseconds] [NX|XX]
用于设置键的值,EX
或PX
选项用于设置过期时间,NX
表示键不存在时才设置,XX
表示键存在时才设置,例如SET mykey "hello" EX 10
将mykey
设置为"hello"并10秒后过期。GET key
获取键的值,如果键不存在则返回nil。MGET key [key ...]
批量获取多个键的值,返回一个值的列表。MSET key value [key value ...]
批量设置多个键值对。INCR key
将键存储的值加1,如果键不存在则先初始化为0再执行加1操作,要求值必须是整数。DECR key
将键存储的值减1,同样要求值为整数。INCRBY key increment
将键存储的值增加指定的increment值,DECRBY key decrement
则减少指定的decrement值。APPEND key value
将指定的value追加到键当前值的末尾,如果键不存在则相当于SET key value
。
哈希(Hash)类型是Redis中用于存储对象结构的数据类型,其值本身是一个键值对的集合,适合存储对象信息。HSET key field value
将哈希表key中的字段field的值设置为value,如果字段field是哈希表中的一个新建字段,并且哈希表不存在,则创建一个新的哈希表并进行HSET
操作。HGET key field
获取哈希表中指定字段的值。HGETALL key
获取哈希表中所有字段和值。HDEL key field [field ...]
删除哈希表中的一个或多个字段。HEXISTS key field
检查哈希表中是否存在指定的字段。HINCRBY key field increment
将哈希表中指定字段的值加上指定的增量increment。HKEYS key
获取哈希表中所有字段。HVALS key
获取哈希表中所有值。HLEN key
获取哈希表中字段的数量。
列表(List)类型是按照插入顺序排序的字符串集合,其元素可以重复,常用于实现消息队列、最新列表等场景。LPUSH key value [value ...]
将一个或多个值value插入到列表key的表头(左边)。RPUSH key value [value ...]
将一个或多个值value插入到列表key的表尾(右边)。LPOP key
移除并返回列表key的头元素。RPOP key
移除并返回列表key的尾元素。LRANGE key start stop
获取列表key中指定范围内的元素,0
表示第一个元素,-1
表示最后一个元素,0 -1
表示获取所有元素。LLEN key
返回列表key的长度。LINDEX key index
返回列表key中指定索引index上的元素,索引从0开始。LREM key count value
移除列表中与value相等的元素,count
大于0表示从表头开始向表尾移除,等于0表示移除所有等于value的元素,小于0表示从表尾开始向表头移除。

集合(Set)类型是String类型的无序集合,集合中的元素是唯一的,不允许重复,常用于标签、共同好友等场景。SADD key member [member ...]
向集合key中添加一个或多个成员member,如果成员已存在则忽略。SMEMBERS key
返回集合key中的所有成员。SREM key member [member ...]
移除集合key中一个或多个成员member。SCARD key
返回集合key中成员的数量。SISMEMBER key member
判断member是否是集合key的成员,是则返回1,否则返回0。SINTER key [key ...]
返回所有给定集合的交集。SUNION key [key ...]
返回所有给定集合的并集。SDIFF key [key ...]
返回第一个集合与其他所有集合的差集。
有序集合(Sorted Set,ZSet)是Redis中特别重要的数据类型,它像Set一样也是String类型元素的集合,且不允许重复的成员,但每个成员都会关联一个double类型的分数(score),Redis正是通过分数来为集合中的成员进行从小到大的排序,常用于排行榜、优先级队列等。ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
向有序集合key中添加一个或多个成员,或者更新已存在成员的分数。ZRANGE key start stop [WITHSCORES]
返回有序集合key中指定索引范围内的成员,按分数从低到高排序,WITHSCORES
表示同时返回成员的分数。ZREVRANGE key start stop [WITHSCORES]
与ZRANGE
相反,按分数从高到低排序。ZSCORE key member
返回有序集合key中成员member的分数。ZINCRBY key increment member
将有序集合key中成员member的分数加上increment。ZCARD key
返回有序集合key中成员的数量。ZCOUNT key min max
返回分数在min和max之间的成员数量。ZRANK key member
返回成员member在有序集合key中的排名(按分数从低到高)。ZREMRANGEBYRANK key start stop
移除有序集合key中指定排名范围内的成员。ZREMRANGEBYSCORE key min max
移除有序集合key中指定分数范围内的成员。
除了针对特定数据类型的命令,Redis还提供了一些通用的命令,如INFO [section]
用于获取Redis服务器的信息和统计,CONFIG GET parameter
和CONFIG SET parameter value
用于获取和运行时配置Redis服务器,FLUSHDB
删除当前数据库中的所有键,FLUSHALL
删除所有数据库中的所有键(慎用)。
为了更直观地展示部分常用命令及其功能,以下是一个简单的表格示例:

命令分类 | 命令 | 功能描述 |
---|---|---|
键操作 | EXISTS key | 检查键是否存在 |
DEL key | 删除键 | |
EXPIRE key seconds | 设置键的过期时间(秒) | |
字符串 | SET key value | 设置键的值 |
GET key | 获取键的值 | |
INCR key | 将键的值加1 | |
列表 | LPUSH key value | 将值插入到列表头部 |
LRANGE key start stop | 获取列表指定范围内的元素 | |
集合 | SADD key member | 向集合添加成员 |
SMEMBERS key | 获取集合所有成员 | |
有序集合 | ZADD key score member | 向有序集合添加成员及分数 |
ZRANGE key start stop [WITHSCORES] | 获取有序集合指定范围内的成员及分数 |
掌握这些Redis命令是高效使用Redis的基础,在实际应用中,需要根据具体的业务场景选择合适的数据类型和命令组合,同时要注意命令的性能影响,例如避免使用KEYS
命令,合理使用管道(Pipeline)和 Lua 脚本来减少网络开销和提高执行效率。
相关问答FAQs:
-
问:Redis中的
KEYS
命令和SCAN
命令有什么区别?为什么在生产环境中推荐使用SCAN
? 答:KEYS pattern
命令会一次性返回所有符合给定模式pattern的键,这个过程会阻塞Redis服务器,导致服务器无法处理其他客户端请求,尤其是在键数量非常庞大的情况下,可能会造成严重的性能问题甚至服务不可用,而SCAN cursor [MATCH pattern] [COUNT count]
命令基于游标进行迭代式查找,每次只返回一部分匹配的键,不会阻塞服务器,客户端可以通过多次调用SCAN
命令,直到游标为0时遍历完所有符合条件的键,在生产环境中,为了不影响Redis服务的稳定性和响应速度,推荐使用SCAN
命令代替KEYS
命令进行键的查找。 -
问:Redis的字符串类型(String)能存储的最大值是多少?除了简单的字符串存储,还有哪些常用场景? 答: Redis的字符串类型(String)可以存储的最大值是512MB,除了存储简单的文本、数字等基本数据外,字符串类型的常用场景还包括:1)计数器:利用
INCR
、DECR
、INCRBY
等原子操作实现计数功能,如文章阅读数、点赞数等;2)对象缓存:将序列化后的JSON对象、XML或其他格式的数据以字符串形式存储,实现对象缓存;3)分布式锁:使用SET
命令的NX
(不存在则设置)和EX
(过期时间)选项,结合GET
和DEL
命令(或Lua脚本)可以实现简单的分布式锁;4)二进制数据存储:可以存储图片、音频等文件的二进制数据(需注意大小限制)。