文章目录
- ⛲Redis为什么那么快?
- 1、☁️纯内存访问
- 2、❄️高效的数据结构
- 3、☀️ 合理的线程模型
- 4、⚡单线程操作
- 5、☔️使用底层模型不同
⛲Redis为什么那么快?
我们在面试中经常被问到:Redis做为一款高性能的NoSql数据库,它高性能的原因具体是什么?。
1、☁️纯内存访问
Redis基于内存存储实现的数据库,数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础。相对于数据存在磁盘的MySQL数据库,省去磁盘I/O的消耗。
2、❄️高效的数据结构
比如哈希表和跳表。Mysql索引为了提高效率,选择了B+树的数据结构。其实合理的数据结构,就是可以让你的应用/程序更快。。
3、☀️ 合理的线程模型
采用非阻塞I/O多路复用机制, I/O 多路复用机制处理大量客户端的Socket请求,因为这是基于非阻塞的 I/O 模型,这就让Redis可以高效地进行网络通信,I/O的读写流程也不再阻塞。
多路I/O复用技术:可以让单个线程高效的处理多个连接请求,而Redis使用用epoll作为I/O多路复用技术的实现。并且,Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
什么是I/O多路复用?
I/O :网络 I/O
多路 :多个网络连接
复用:复用同一个线程。
IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。
4、⚡单线程操作
避免了不必要的上下文切换和竞争条件,也就不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
Redis 6.0 引入了多线程提速,它的执行命令操作内存的仍然是个单线程。。
5、☔️使用底层模型不同
它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
VM机制具体是指:Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。
道阻且长,行则将至。事虽难,做则必成。
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励👍👍👍吧