一、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):可为键设置过期时间,自动清理无效数据(如缓存的有效期)。