每日一题-Redis 为什么那么快?

面试的时候这个问题可能经常被问到,大家一般如何回答这个问题,欢迎大家讨论

已邀请:

peanut - 程序员一个

我自己的答案如下:

  • Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,如哈希 表和跳表
  • Redis采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率
还有就是大家对redis的单线程的误解:Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。而Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。

还有就是redis在6.0版本已经支持了多线程


空心菜 - 牛逼你来

  1. 纯内存操作:读取不需要进行磁盘 I/O,所以比传统数据库要快上不少;(但不要有误区说磁盘就一定慢,例如 Kafka 就是使用磁盘顺序读取但仍然较快);
  2. 单线程,无锁竞争:这保证了没有线程的上下文切换,不会因为多线程的一些操作而降低性能;
  3. 多路 I/O 复用模型,非阻塞 I/O:采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗);
  4. 高效的数据结构,加上底层做了大量优化:Redis 对于底层的数据结构和内存占用做了大量的优化,例如不同长度的字符串使用不同的结构体表示,HyperLogLog 的密集型存储结构等。

要回复问题请先登录注册