75. 为什么 Redis 单线程模型也能效率这么高?
1、C 语言实现。
> 我们都知道,C 语言的执行速度非常快。
2、纯内存操作。
> Redis 为了达到最快的读写速度,将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以 Redis 具有快速和数据持久化的特征。
>
> 如果不将数据放在内存中,磁盘 I/O 速度为严重影响 Redis 的性能。
3、基于非阻塞的 IO 多路复用机制。
4、单线程,避免了多线程的频繁上下文切换问题。
> Redis 利用队列技术,将并发访问变为串行访问,消除了传统数据库串行控制的开销。
>
> 实际上,Redis 4.0 开始,也开始有了一些异步线程,用于处理一些耗时操作。例如说,异步线程,实现[惰性删除](https://blog.csdn.net/zhanglong_4444/article/details/88350443)(解决大 KEY 删除,阻塞主线程)和异步 AOF (解决磁盘 IO 紧张时,fsync 执行一次很慢)等等。
5、丰富的数据结构。
> Redis 全程使用 hash 结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化。例如,压缩表,对短数据进行压缩存储;再再如,跳表,使用有序的数据结构加快读取的速度。
>
> 也因为 Redis 是单线程的,所以可以实现丰富的数据结构,无需考虑并发的问题。