Redis(Remote Dictionary Server)是一个开源的内存数据结构键值存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,如: 字符串、哈希、列表、集合和有序集合等。
Redis 提供了丰富的操作命令,并将数据存储在内存中,因此具有极高的读写性能。同时,它也支持持久化,可以将数据保存到磁盘上,确保数据的安全。
Redis 还支持以下高可用架构,能够满足不同场景下的需求:
- 主从复制
- 哨兵模式
- 集群模式
数据结构
| 数据类型 | 特点 | 实现原理 | 典型应用 |
|---|---|---|---|
| String(字符串) | 1. 二进制安全,可存文本/数字/二进制 2. 最大512MB 3. 支持原子操作 |
1. SDS(Simple Dynamic String)实现 2. 预分配空间,减少内存分配 3. 惰性删除空间 |
1. 缓存(session/页面) 2. 计数器(INCR/DECR) 3. 分布式锁(SET NX) |
| Hash(哈希) | 1. 字段-值对集合 2. 适合存储对象 3. 每个Hash可存2³²-1对 |
1. 哈希表 + 压缩列表 2. 小Hash用ziplist节省内存 3. 大Hash用hashtable |
1. 用户信息存储 2. 商品属性 3. 配置项管理 |
| List(列表) | 1. 有序字符串集合 2. 按照插入顺序排序 3. 可重复元素 4. 两端操作O(1) |
1. 快速链表(quicklist) 2. 双向链表节点 + ziplist 3. 压缩中间节点节省内存 |
1. 消息队列 2. 最新文章列表 3. 任务队列 |
| Set(集合) | 1. 无序唯一元素集合 2. 支持集合运算 3. 最大2³²-1元素 |
1. 哈希表实现(值NULL) 2. 小集合用intset(整数集合) 3. 自动升级结构 |
1. 标签系统 2. 共同好友 3. 独立IP统计 |
| Sorted Set(有序集合) | 1. 元素唯一,分数可重复 2. 按分数排序 3. 范围查询高效 |
1. 哈希表 + 跳表(skiplist) 2. 小集合用ziplist 3. O(logN)查找插入 |
1. 排行榜 2. 带权重队列 3. 范围查找 |
| Bitmaps(位图) | 1. 本质上就是String 2. 按位操作 3. 极其节省空间 |
1. 基于String的位操作 2. SETBIT/GETBIT命令 3. 自动扩展 |
1. 用户签到 2. 活跃用户统计 3. 布隆过滤器 |
| HyperLogLog | 1. 基数估算 2. 误差率0.81% 3. 固定12KB内存 |
1. 概率算法 2. 使用16384个6bit寄存器 3. 分桶调和平均数 |
1. UV统计 2. 独立搜索词统计 3. 大规模去重 |
| Geospatial(地理位置) | 1. 存储经纬度 2. 距离计算 3. 范围查询 |
1. 基于Sorted Set实现 2. GeoHash编码 3. 将二维坐标映射为一维 |
1. 附近的人 2. 地理位置搜索 3. 距离计算 |
| Stream(流) | 1. Redis 5.0+ 2. 消息持久化 3. 消费者组 |
1. Rax树(基数树) 2. 链表存储消息 3. 可持久化 |
1. 消息队列 2. 事件溯源 3. 日志收集 |
2025/12/25大约 39 分钟