Redis 主要支持以下几种常见数据类型:
- string(字符串): 最基础的数据存储类型,可用于保存字符串、整数或浮点数。
- hash(哈希):一种键值对集合,适合在一个 key 中存储多个字段。
- list(列表):一个简单的有序列表,可存放一系列字符串元素。
- set(集合):一个无序集合,可保存不重复的字符串成员。
- zset(sorted set:有序集合): 与集合类似,但每个成员都会关联一个分数(score)。
- 位图(Bitmaps):基于字符串类型实现,可对二进制位进行操作。
- 超日志(HyperLogLogs):用于基数统计,能够估算集合中的唯一元素数量。
- 地理空间(Geospatial):用于保存和处理地理位置信息。
- 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅频道,并接收发布到该频道的消息。
- 流(Streams):适用于消息队列与日志存储,支持消息持久化和按时间排序。
- 模块(Modules):Redis 支持动态加载模块,从而扩展更多功能。
String(字符串)
string 是 Redis 中最基础、最常用的数据类型,你可以把它理解为与 Memcached 类似的 key-value 存储结构,一个 key 对应一个 value。
string 类型具备二进制安全特性,这意味着 Redis 的 string 可以保存任意数据,例如 jpg 图片内容或序列化后的对象。
string 类型是 Redis 最基本的数据类型,单个 string 值最大可存储 512MB。
常用命令
SET key value:设置键对应的值。GET key:读取键对应的值。INCR key:将键的值递增 1。DECR key:将键的值递减 1。APPEND key value:把新值追加到原有值后面。
实例
redis 127.0.0.1:6379> SET runoob "菜鸟教程"
OK
redis 127.0.0.1:6379> GET runoob
"菜鸟教程"
在以上示例中,使用了 Redis 的 SET 和 GET 命令。键为 runoob,对应的值是 菜鸟教程。
注意:一个键最大可存储 512MB 数据。
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合,类似一个轻量级的 NoSQL 数据结构。
Redis hash 本质上是 string 类型的 field 和 value 映射表,因此特别适合用于存储对象属性。
每个哈希最多可存储 2^32 - 1 个键值对。
HSET key field value:设置哈希表中指定字段的值。HGET key field:获取哈希表中指定字段的值。HGETALL key:获取哈希表中的所有字段和值。HDEL key field:删除哈希表中的一个或多个字段。
常用命令
实例
DEL runoob 用于删除前面测试过的 key,否则会报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value

redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> HMSET runoob field1 "Hello" field2 "World"
"OK"
redis 127.0.0.1:6379> HGET runoob field1
"Hello"
redis 127.0.0.1:6379> HGET runoob field2
"World"
这个示例中,使用的是 Redis 的 HMSET、HGET 命令。HMSET 用于一次写入多个 field=>value 键值对,而 HGET 则负责读取指定 field 对应的 value。
List(列表)
Redis 的列表本质上是一个按照插入顺序排序的字符串列表。元素既可以插入到列表头部(左侧),也可以追加到列表尾部(右侧)。
列表最多可以存储 2^32 - 1 个元素。
常用命令
LPUSH key value:将值插入到列表头部。RPUSH key value:将值插入到列表尾部。LPOP key:移除并获取列表中的第一个元素。RPOP key:移除并获取列表中的最后一个元素。LRANGE key start stop:获取列表指定范围内的元素。
实例
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> lpush runoob redis
(integer) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabbitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
redis 127.0.0.1:6379>
Set(集合)
Redis 的 Set 是 string 类型元素组成的无序集合。
集合底层通常通过哈希表实现,因此在添加、删除和查找成员时,时间复杂度通常为 O(1)。
常用命令
SADD key value:向集合中添加一个或多个成员。SREM key value:从集合中移除一个或多个成员。SMEMBERS key:返回集合中的全部成员。SISMEMBER key value:判断某个值是否为集合成员。
sadd 命令
向 key 对应的 set 集合中添加一个 string 元素,成功返回 1;如果该元素已存在于集合中,则返回 0。
sadd key member
实例
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> sadd runoob redis
(integer) 1
redis 127.0.0.1:6379> sadd runoob mongodb
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 1
redis 127.0.0.1:6379> sadd runoob rabbitmq
(integer) 0
redis 127.0.0.1:6379> smembers runoob
1) "redis"
2) "rabbitmq"
3) "mongodb"
注意:以上示例中 rabbitmq 被添加了两次,但由于集合元素具有唯一性,第二次插入会被自动忽略。
集合中最大的成员数为 232 - 1(4294967295,即每个集合可存储 40 多亿个成员)。
zset(sorted set:有序集合)
Redis 的 zset 和 set 一样,都是 string 类型元素的集合,且成员不允许重复。不同之处在于,每个元素都会关联一个 double 类型的分数。Redis 正是通过这个分数对集合中的成员按从小到大进行排序。
zset 中的成员是唯一的,但分数(score)可以重复。
常用命令
ZADD key score value:向有序集合添加一个或多个成员,或更新已有成员的分数。ZRANGE key start stop [WITHSCORES]:返回指定范围内的成员。ZREM key value:移除有序集合中的一个或多个成员。ZSCORE key value:返回有序集合中某个成员的分数值。
zadd 命令
向有序集合添加元素,如果元素已存在,则更新其对应的 score。
zadd key score member
实例
redis 127.0.0.1:6379> DEL runoob
redis 127.0.0.1:6379> zadd runoob 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 1
redis 127.0.0.1:6379> zadd runoob 0 rabbitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000
1) "mongodb"
2) "rabbitmq"
3) "redis"
其他高级数据类似
HyperLogLog
- 用于基数估算的数据结构。
- 常用于统计唯一值数量的近似结果。
Bitmaps
- 位数组结构,可对字符串执行位运算操作。
- 常用于布隆过滤器等位运算场景。
Geospatial Indexes
- 用于处理地理空间数据,支持地理位置索引和半径范围查询。
- 一种日志型数据结构,支持时间序列数据处理。
- 常用于消息队列、事件流和实时数据处理场景。
