一、Redis 的核心特点
-
基于内存(In-Memory)
- 数据默认存储在内存中,读写速度极快(官方测试读速度可达 11 万次 / 秒,写速度可达 8 万次 / 秒)。
- 缺点:内存空间有限,数据易失性(断电丢失),需通过持久化机制(RDB/AOF)保证数据可靠性。
-
丰富的数据结构
Redis 支持多种数据结构,每种结构对应不同的应用场景:- 字符串(String):最简单的数据类型,用于存储单个值(如计数器、缓存用户信息)。
- 哈希(Hash):键值对的集合,适合存储对象(如用户详情:
user:1 {name: "Alice", age: 25}
)。 - 列表(List):有序可重复的链表,支持两端插入 / 删除,用于消息队列(如任务队列)、最新列表(如朋友圈动态)。
- 集合(Set):无序唯一的元素集合,用于去重(如统计用户唯一登录数)、交集 / 并集运算(如共同关注)。
- 有序集合(Sorted Set):带分数的有序集合,用于排行榜(如按分数排序的用户排名)。
- 其他:位图(Bitmap)、HyperLogLog(基数统计)、地理空间(Geospatial)等。
-
持久化机制
- RDB(Redis Database):定时将内存数据快照写入磁盘,适合大规模数据的备份。
- AOF(Append Only File):记录每一条写命令,重启时重新执行命令恢复数据,数据安全性更高。
- 可同时开启 RDB 和 AOF,优先使用 AOF 恢复数据。
-
单线程与高性能
- Redis 基于单线程模型处理请求(基于非阻塞 I/O 多路复用技术),避免了多线程的上下文切换开销,性能卓越。
- 单线程意味着 Redis 自身不会出现线程安全问题,但需注意多个客户端并发访问时的竞争条件(可通过事务或分布式锁解决)。
-
原生支持集群(Cluster)
- 可通过分片(Sharding)将数据分布到多个节点,支持动态扩缩容,解决单节点内存限制和高并发问题。
- 集群模式下自动实现数据分片和故障转移,保证高可用性。
-
其他功能
- 发布订阅(Pub/Sub):实现消息传递,用于实时通信(如实时聊天、通知系统)。
- 事务(Transaction):支持简单的事务操作,确保命令序列的原子性执行。
- Lua 脚本:支持在服务端执行 Lua 脚本,减少客户端与服务端的交互次数。
- 过期键(TTL):可为键设置过期时间,自动清理无效数据(如缓存的有效期)。