Redis 的数据类型
String(字符串)
最基本的数据类型,可用存储文本、数字、二进制数据。
Hash(哈希表)
存储键和值的映射,适合存储对象(如用户信息)。
List
一个有序可重复的字符串序列,底层是双端链表。
Set
无序且不重复的字符串集合。
Sorted Set
每个元素带有一个分数(score),集合会按照 score 排序。
BitMap(位图)
基于 String 的位操作,适合存储二进制状态(0/1)。
HyperLogLog
一种基数统计算法结构,用于估算去重数据量,误差在 0.81% 左右。
Geo(地理位置)
存储地理坐标,并提高基于经纬度的计算。
Stream(流)
高级消息队列,支持消费组、消息持久化。
Redis 的线程模型
Redis 采用 单线程 + I/O 多路复用的模型来处理客户端请求。
1. 单线程执行命令
Redis 的核心逻辑(命令解析、数据读写)是单线程的。避免了多线程带来的上下文切换和锁竞争。这样 Redis 内部的数据结构可以不用加锁,保证了极高的执行效率。
2. I/O 多路复用
Redis 使用操作系统提供的 I/O 多路复用机制,可以同时监听多个客户端的 socket 连接。当某个 socket 可读/可写时,操作系统会通知 Redis,Redis 再去处理对应的请求。这使得单线程也能同时处理成千上万个连接。
Redis 的持久化机制
持久化机制可以保证数据不会因为宕机而完全丢失,主要有两种核心方式。
1. RDB(Redis Database File)
机制:在某个时刻把内存数据的快照保存到磁盘上(类似全量备份)。
优点:文件小,恢复速度快,适合用于冷备份。
缺点:宕机时可能丢失最后一次快照之后的数据(不实时)。
2. AOF (Append Only File)
机制:把每一个写命令追加到日志文件中(类似增量日志)。
优点:具有更高的数据安全性;日志格式是文本,可读性强,出错时可修复。
缺点:文件比 RDB 大,恢复速度比 RDB 慢。
3. 混合持久化
机制:在重写 AOF 时,先把内存快照(RDB方式)写入 AOF 文件开头,后续再追加命令日志。
优点:结合了 RDB 恢复快和 AOF 更安全的优点,启动时先加载 RDB,再加载少量 AOF 日志。
缺点:文件结构更复杂,不如单独的 RDB 或 AOF 简单。