Redis基本数据类型
类型简介
类型 | 场景 |
---|---|
String | 缓存对象、常规计数、分布式锁、共享session信息 |
List | 消息队列 |
Hash | 缓存对象、购物车 |
Set | 聚合计算:点赞、共同关注、抽奖活动 |
ZSet | 排序场景:排行榜、电话/姓名排序 |
String类型
默认情况下,单个Redis字符串最大可以是512 MB。
信息
是 Redis 中最基础、最简单的数据类型。
它由一个键(key)对应一个值(value)构成,值可以是:
- 普通字符串(如
"hello"
) - 整数(如
"123"
) - 浮点数(如
"3.14"
)
Redis 会根据值的内容自动进行类型识别和优化存储:
值类型 | Redis 内部存储方式 | 存储结构 | 占用空间 |
---|---|---|---|
整数(Integer) | 使用 long 类型 | 整型数值 | 8 字节 |
浮点数(Float) | 使用 double 类型 | 浮点数值 | 8 字节 |
字符串(String) | 使用 SDS(Simple Dynamic String) | 动态字符串 | 动态分配(通常大于 10 字节) |
SDS(Simple Dynamic String) 是 Redis 自定义的字符串表示方式,相比 C 原生字符串更安全、高效,支持 O(1) 的长度获取、自动扩容等特性;
类型为整数类型时支持进行INCR、INCRBY操作;
类型为浮点数类型时支持进行INCRBYFLOAT操作;
基本命令
命令 | 描述 |
---|---|
SET key value | 设置键值对 |
GET key | 获取值 |
MSET key1 value1 [key2 value2 ...] | 同时设置多个键值对 |
MGET key1 [key2 ...] | 获取多个键对应的值 |
INCR key increment | 将值增加 1(适用于数字) |
INCRBY key increment | 将键存储的整数值增加指定的增量 |
INCRBYFLOAT increment | 将键存储的浮点数值增加指定的增量 |
DECR key | 减少 1(很少用,如果需要减少可以在追加中使用incrby 将参数设置为负数) |
APPEND key value | 追加字符串 |
追加参数
参数 | 含义 | 用法 |
---|---|---|
EX seconds (常用) | 设置键的过期时间(以秒为单位) | SET key value EX 60 |
NX (常用) | 仅当键不存在时才设置(Not eXists) | SET key value NX |
PX milliseconds | 设置键的过期时间(以毫秒为单位) | SET key value PX 5000 |
XX | 仅当键存在时才设置(eXists) | SET key value XX |
LIST类型
信息
Redis 的 List(列表) 是一个有序的字符串元素集合,支持从头部(左边)或尾部(右边)添加/移除元素。它支持在两端进行高效的插入和删除操作,非常适合用于实现队列(Queue)和栈(Stack)等结构。
基本命令
命令 | 描述 |
---|---|
LPUSH key value [value ...] | 在列表左侧插入一个或多个值 |
RPUSH key value [value ...] | 在列表右侧插入一个或多个值 |
LPOP key | 移除并返回列表左侧第一个元素 |
RPOP key | 移除并返回列表右侧第一个元素 |
LRANGE key start stop | 获取指定范围内的元素(如 0 -1 表示全部元素) |
LINDEX key index | 获取指定索引位置的元素 |
LLEN key | 返回列表的长度 |
LREM key count value | 移除列表中与 value 相等的元素,count 控制删除次数 |
LTRIM key start stop | 只保留指定范围内的元素,其余删除 |
BLPOP key [key ...] timeout | 阻塞式弹出列表左侧元素,用于构建阻塞队列 |
BRPOP key [key ...] timeout | 阻塞式弹出列表右侧元素 |
Hash
信息
Redis的Hash类型是一种数据结构,用于存储字段(field)和值(value)之间的映射关系。它非常适合用来表示对象,因为可以将对象的属性名作为字段,属性值作为对应的值。
Redis Hash是基于哈希表实现的,可以存储多个键值对。
当哈希中元素数量较少且值大小适当时,Redis会使用ziplist(压缩列表)作为内部编码以节省内存;当哈希中的元素增多或值变大时,会自动转换为hashtable(哈希表)以提高访问效率。
基本命令
命令名称 | 语法格式 | 描述 |
---|---|---|
HSET | HSET key field value | 设置哈希表 key 中字段 field 的值为 value 。 |
HGET | HGET key field | 获取哈希表 key 中字段 field 的值。 |
HMSET | HMSET key field1 value1 [field2 value2 ...] | 同时设置哈希表中多个字段和对应的值(已逐步被 HSET 替代)。 |
HMGET | HMGET key field1 [field2 ...] | 获取哈希表中一个或多个字段的值。 |
HDEL | HDEL key field1 [field2 ...] | 删除哈希表中的一个或多个字段。 |
HEXISTS | HEXISTS key field | 检查哈希表中是否存在指定字段,存在返回 1 ,否则返回 0 。 |
HKEYS | HKEYS key | 获取哈希表中所有的字段名。 |
HVALS | HVALS key | 获取哈希表中所有的字段值。 |
HGETALL | HGETALL key | 获取哈希表中所有字段和值。返回格式为 [field1, value1, field2, ...] |
HLEN | HLEN key | 获取哈希表中字段的数量。 |
HSETNX | HSETNX key field value | 只有在字段 field 不存在时才设置其值。 |
HINCRBY | HINCRBY key field increment | 将哈希表中字段的整数值增加 increment (可为负数)。 |
HINCRBYFLOAT | HINCRBYFLOAT key field increment | 将哈希表中字段的浮点数值增加 increment 。 |
HSCAN | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对,适用于大数据量场景。 |
SET类型
Redis集合的最大大小是2^32 - 1个元素。
信息
Redis 的 SET 类型 是一种无序的、不重复的字符串集合。它非常适合用于存储一组唯一的元素,并支持常见的集合操作,如并集、交集、差集等。
基本命令
命令名 | 语法格式 | 描述说明 |
---|---|---|
SADD | SADD key member [member ...] | 向集合中添加一个或多个唯一成员。如果成员已存在则忽略。 |
SMEMBERS | SMEMBERS key | 获取集合中的所有成员(无序)。 |
SISMEMBER | SISMEMBER key member | 判断某个成员是否存在于集合中。存在返回 1 ,否则返回 0 。 |
SCARD | SCARD key | 获取集合的成员数量(集合大小)。 |
SREM | SREM key member [member ...] | 删除集合中的一个或多个成员。 |
SRANDMEMBER | SRANDMEMBER key [count] | 随机返回一个或多个集合成员(不会删除)。 |
SPOP | SPOP key [count] | 随机移除并返回一个或多个集合成员。 |
SMOVE | SMOVE source destination member | 将成员从一个集合移动到另一个集合。 |
SDIFF | SDIFF key1 key2 [key3 ...] | 返回第一个集合与其他集合的差集。 |
SINTER | SINTER key1 key2 [key3 ...] | 返回多个集合的交集。 |
SUNION | SUNION key1 key2 [key3 ...] | 返回多个集合的并集。 |
ZSET集合
信息
Redis 的 Sorted Set(也称为 ZSET)是一种特殊的集合类型,它除了存储成员(member)外,还为每个成员关联了一个分数(score),这使得成员可以按照分数进行排序。Sorted Set 非常适合需要有序数据的应用场景,例如排行榜、优先级队列等。
基本命令:
命令 | 语法格式 | 描述 |
---|---|---|
ZADD | `ZADD key [NX | XX] [CH] [INCR] score member [score member ...]` |
ZRANGE | ZRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,按分数从低到高排序。使用 WITHSCORES 可以同时返回成员的分数。 |
ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,按分数从高到低排序。 |
ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集中,分数介于 min 和 max 之间的成员。支持 WITHSCORES 显示分数和 LIMIT 分页。 |
ZREM | ZREM key member [member ...] | 移除有序集中的一个或多个成员。不存在的成员会被忽略。 |
ZSCORE | ZSCORE key member | 返回有序集中,成员的分数值。如果成员不存在则返回 nil 。 |
ZINCRBY | ZINCRBY key increment member | 为有序集中的指定成员的分数值加上增量 increment 。 |
ZCARD | ZCARD key | 获取有序集的成员数量。 |
ZCOUNT | ZCOUNT key min max | 计算有序集中分数介于 min 和 max 之间的成员数量。 |
ZPOPMAX/ZPOPMIN | ZPOPMAX key [count] / ZPOPMIN key [count] | 移除并返回有序集中分数最高/最低的一个或多个成员。 |