Redis数据类型及其命令
2025年11月24日大约 5 分钟
Redis数据类型及其命令
Redis 数据结构
知识回顾
Redis 是key-value的数据库,key一般是String类型,value可以是多种数据类型。

- 基本数据类型:
- 字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(Hash)。
- 特殊/复杂数据类型:
- 位图(Bitmap)、超日志(HyperLog/HyperLogLog)和地理空间索引(GEO/Geospatial Indexes)。
Redis 通用命令
提示
通过 help 命令可以查看 Redis 支持的所有命令及其用法。
因此下面命令有印象即可,使用时可查阅帮助文档。
KEYSpattern- 查找所有符合给定模式的 key。(不建议在生产环境使用)
DELkey [key ...]- 删除一个或多个 key。
EXISTSkey- 检查给定 key 是否存在。
EXPIREkey seconds- 为 key 设置有效期(以秒为单位)。时间到期后,key 会被自动删除。
TTLkey- 获取 key 的剩余有效期(以秒为单位)。
String 类型
提示
String 是 Redis 中最基本的数据类型。
其value可以是字符串,不过根据字符串的内容不同,可以分为三类:
- string类型:(普通字符串)
- int类型:(整数)可以进行自增、自减等操作
- float类型:(浮点数)可以进行自增、自减等操作
注意
String 类型的值最大可以存储 512 MB 的数据。
增查命令
SETkey value- 设置指定 key 的值为 value。
MSETkey value [key value ...]- 批量设置多个 key 的值。
GETkey- 获取指定 key 的值。
MGETkey [key ...]- 批量获取多个 key 的值。
改命令
INCRkey- 将指定 key 的值加 1(适用于整数值)。
INCRBYkey increment- 将指定 key 的值增加指定的增量(适用于整数值)。
INCRBYFLOATkey increment- 将指定 key 的值增加指定的增量(适用于浮点数值)。
注意
INCRBY 和 INCRBYFLOAT 的 increment 参数可以是负数,从而实现减法操作。
DECRkey- 将指定 key 的值减 1(适用于整数值)。
组合命令
SETEXkey seconds value- 设置指定 key 的值为 value,并设置有效期(以秒为单位)。
SETNXkey value- 仅当 key 不存在时,设置指定 key 的值为 value。
注意
SETNX 和 SETEX 的 NX 和 EX 位置可以写在语句的任意位置
Key的层级格式(核心)
问题引入
在MySQL中,我们可以通过表(table)来区分不同类型的数据,比如商品表、用户表等。
但是在Redis中,没有表的概念,所有的数据都存储在同一个命名空间中。
比如商品和用户的id都是1,那么如何区分不同类型的数据呢?
Redis提供了一种解决方案,就是通过多个单词形成层级结构来区分不同类型的数据。
- 在单词之间使用
:作为分隔符,形成一个层级结构。 - 例如,我们可以使用
product:1来表示商品表中的id为1的数据,使用user:1来表示用户表中的id为1的数据。 - 推荐Key的层级格式为
项目名:业务名:数据类型:唯一标识(id)。
Hash 类型
- Hash 类型在 Redis 中用于存储键值对集合,类似于 Java 中的 Map 或 Python 中的字典。
- 每个 Hash 由一个 key 和多个字段(field)及其对应的值(value)组成。
- 下面是String类型和Hash类型的存储结构区别:

增改命令
HSETkey field value- 在指定的 Hash 中设置字段 field 的值为 value。(可增可改)
HMSETkey field value [field value ...]- 批量设置多个字段及其对应的值。(可增可改)
查命令
HGETkey field- 获取指定 Hash 中字段 field 的值。
HMGETkey field [field ...]- 批量获取指定 Hash 中多个字段的值。
HVALUESkey- 获取指定 Hash 中所有字段的value。
HKEYSkey- 获取指定 Hash 中所有field。
删命令
HDELkey field [field ...]- 删除指定 Hash 中的一个或多个字段。
组合命令
HSETNXkey field value- 仅当字段 field 不存在时,设置指定 Hash 中字段 field 的value。
List 类型
Redis的List类型就是一个双向链表结构,类似LinkedList,可以在两端进行操作。
提示
具体命令这里就不再赘述了,因为我觉得前面写太多命令有点影响阅读,并且命令可以在Redis的官方文档中查阅。
这里往后就都只对命令的特点进行总结,可能之后会把前面的具体命令删除了,增强阅读体验。
Set 类型
Redis的Set类型就是一个无序集合,类似HashSet,不允许重复元素。
- 特点:
- 无序:Set中的元素没有顺序,不能通过索引访问。
- 不允许重复:Set中的元素是唯一的,如果添加重复元素,原有元素不会被覆盖。
- 支持集合操作:可以进行交集、并集、差集等集合操作。(这是Java中的HashSet没有的)
SortedSet 类型
Redis的SortedSet类型就是一个可排序的集合,类似TreeSet,不允许重复元素,并且每个元素都会关联一个score属性,根据score进行排序。
- 在底层数据结构上是和Java的TreeSet不同的:
- Java的TreeSet底层是基于红黑树实现的
- Redis的SortedSet底层是基于跳表(SkipList)+ 哈希表实现的。
- 特点:
- 可排序:SortedSet中的元素根据关联的
score进行排序,可以通过score范围查询元素。 - 不允许重复:SortedSet中的元素是唯一的,如果添加重复元素,原有元素的
score会被更新。 - 支持集合操作:可以进行交集、并集、差集等集合操作。
- 查询速度快:由于底层使用跳表,SortedSet的查询速度非常快,尤其是在范围查询时表现出色。
- 可排序:SortedSet中的元素根据关联的
因此SortedSet非常适合用于排行榜、优先级队列等需要排序的场景。