1. 字符串(String)
简介
- 字符串是 Redis 中最基本的数据类型。它可以存储任何类型的二进制数据,包括文本字符串、整数、浮点数等。
特点
- **最大长度**:一个字符串值最多可以存储 512 MB 的数据。
- **应用场景**:通常用于存储简单的键值对,如缓存对象的 ID、配置项、计数器等。
常用命令
- `SET key value`:设置指定键的值。
- `GET key`:获取指定键的值。
- `INCR key`:对存储在键中的数值增一。
- `DECR key`:对存储在键中的数值减一。
- `APPEND key value`:为指定的键追加值。
2. 列表(List)
简介
- 列表是一个按顺序存储的字符串集合,实际上是一个双向链表。
特点
- **操作高效**:列表的两端可以在常数时间内进行插入和弹出操作。
- **应用场景**:适合用于实现队列、消息队列、任务列表、时间线等。
常用命令
- `LPUSH key value`:在列表头部插入一个元素。
- `RPUSH key value`:在列表尾部插入一个元素。
- `LPOP key`:从列表头部弹出一个元素。
- `RPOP key`:从列表尾部弹出一个元素。
- `LRANGE key start stop`:获取列表中指定范围内的元素。
3. 集合(Set)
简介
- 集合是一个无序的字符串集合,集合中的元素是唯一的,不允许重复。
特点
- **唯一性**:集合自动去重,适合用于存储唯一性要求的数据。
- **应用场景**:适用于需要快速查找、去重的场景,如标签管理、共同好友、去重等。
常用命令
- `SADD key value`:向集合中添加一个元素。
- `SREM key value`:移除集合中的某个元素。
- `SMEMBERS key`:返回集合中的所有元素。
- `SISMEMBER key value`:检查指定元素是否在集合中。
- `SUNION key [key ...]`:返回给定集合的并集。
4. 有序集合(Sorted Set)
简介
- 有序集合和集合类似,不同之处在于每个元素都会关联一个得分(score),Redis 会根据分值进行排序。
特点
- **按分值排序**:元素按分值从小到大排序,可以实现带有优先级的任务调度。
- **应用场景**:适用于排行榜、优先级队列、按时间戳排序的数据等。
常用命令
- `ZADD key score value`:向有序集合中添加一个元素,并指定其分值。
- `ZRANGE key start stop`:按分值从低到高获取有序集合中的元素。
- `ZRANK key value`:获取元素在有序集合中的排名。
- `ZREM key value`:移除有序集合中的某个元素。
- `ZSCORE key value`:获取有序集合中指定元素的分值。
5. 哈希表(Hash)
简介
- 哈希表是一个键值对集合,适合用于存储对象的属性值(如用户信息)。
特点
- **键值对存储**:哈希表类似于 Java 中的 `Map` 或 Python 中的 `dict`,可以用来存储多个字段及其对应的值。
- **应用场景**:适用于存储结构化数据,如用户信息、产品详情等。
常用命令
- `HSET key field value`:设置哈希表中字段的值。
- `HGET key field`:获取哈希表中指定字段的值。
- `HDEL key field`:删除哈希表中的一个或多个字段。
- `HGETALL key`:获取哈希表中所有字段及其值。
- `HEXISTS key field`:检查哈希表中是否存在指定字段。
6. 位图(Bitmaps)
简介
- 位图是对字符串进行位操作的一种数据结构,能够以非常小的内存占用来存储大量布尔值。
特点
- **高效存储**:位图可以有效地存储大量的布尔值(bit)。
- **应用场景**:适用于需要大量布尔状态标识的场景,如用户签到、在线状态等。
常用命令
- `SETBIT key offset value`:设置位图中指定偏移量的位值。
- `GETBIT key offset`:获取位图中指定偏移量的位值。
- `BITCOUNT key [start end]`:统计位图中值为1的位数。
7. HyperLogLog
简介
- HyperLogLog 是一种概率性的数据结构,用于基数统计,即用于近似地统计某个集合中的唯一元素数量。
特点
- **内存友好**:即使在非常大的数据集上,HyperLogLog 也只需要使用少量的内存(12 KB)来计算基数。
- **应用场景**:适用于需要高效地统计唯一元素数量而不在乎精确度的场景,如去重计数、大规模数据分析等。
常用命令
- `PFADD key element [element ...]`:向 HyperLogLog 添加元素。
- `PFCOUNT key [key ...]`:返回 HyperLogLog 估计的基数(即唯一元素的近似数量)。
- `PFMERGE destkey sourcekey [sourcekey ...]`:将多个 HyperLogLog 合并为一个。
8. 地理空间(Geospatial)
简介
- Redis 的地理空间数据类型允许你存储地理位置信息,并进行相关的地理位置操作。
特点
- **地理位置操作**:支持存储地理位置、计算距离、查找附近位置等操作。
- **应用场景**:适用于需要处理地理位置数据的应用,如地图服务、基于位置的推荐等。
常用命令
- `GEOADD key longitude latitude member`:将地理位置存储到键中。
- `GEODIST key member1 member2 [unit]`:计算两个地理位置之间的距离。
- `GEORADIUS key longitude latitude radius m|km|ft|mi`:返回指定半径内的所有位置。
9. 流(Streams)
简介
- 流是 Redis 5.0 引入的一种新的数据结构,用于处理实时数据流。
特点
- **日志数据结构**:流类似于日志或消息队列,支持消息的追加、消费、分组等操作。
- **应用场景**:适用于事件流处理、消息队列、日志收集等场景。
常用命令
- `XADD key * field value [field value ...]`:向流中添加消息。
- `XRANGE key start end [COUNT count]`:获取指定范围内的消息。
- `XREAD COUNT count STREAMS key [key ...] id [id ...]`:读取消息。
总结
Redis 提供的这些数据类型,使其不仅仅是一个简单的键值存储系统,而是一个强大的多功能数据存储和处理平台。这些数据类型的灵活性和丰富的操作,使得 Redis 可以应对从简单缓存到复杂数据分析、地理位置计算、实时数据处理等多种应用场景。