揭秘 Redis 的高性能
在线上的项目中,一旦用户量上来,在 QPS 较高的情况下,我们的系统可能会出现响应缓慢,性能急剧下降,在分析性能瓶颈的过程中,会发现很多情况下,都会是因为数据库的性能导致的瓶颈。
内存访问
传统数据库之所以会慢,是因为很大一部分耗时操作都在磁盘 IO
上,计算机在执行指令的时候,最快是直接从内存中去拿,而 Redis
就是纯内存访问,Redis
将所有数据放在内存中,内存的响应时间大约为 100 纳秒,这时 Redis
达到每秒万级别访问的重要基础。
非阻塞 I/O
Redis
使用 epoll
作为 I/O 多路复用技术的实现,在加上 Redis
自身的事件处理模型将 epoll 中的链接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间。
单线程
想要理解Redis
的单线程,需要搞清楚以下两个问题。
Redis 是单线程吗?
Redis
的单线程主要是指 Redis
的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis
对外 提供键值存储服务的主要流程。但 Redis
的其他功能,比如持久化、异步删除、集群数据同步等,其
实是由额外的线程执行的。
Redis 单线程为什么还能这么快?
因为它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性 能损耗问题。正因为 Redis
是单线程,所以要小心使用 Redis
指令,对于那些耗时的指令(比如 keys
),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。
数据结构
Redis
之所以快,数据结构也帮了不少忙,Redis
全程使用 hash
结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
推荐阅读
•聊一聊 Redis 基本类型和使用场景•Redis高可用架构系列(一)主从架构•Redis 的持久化原理
如果觉得文章对你有帮助,可以点个赞,转载请注名出处。
评论 (0)