Redis 为什么那么快 ?
1个回答
展开全部
前段时间面试被问到这个问题了? 我的回答也是很简单,总结大概就有两点 :
事后我我下去又翻了许多资料,主要总结出一下内容 :
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,所以 Redis 是单线程的。
IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程。
这里可能有不理解的地方,我尝试说一下我的理解 :
进程执行都是顺序执行的,当我们在执行一个操作的时候,进程可能阻塞,此时进程就阻塞在这个调用上,不能执行其他操作。有没有什么解决办法呢 ? 有! 就是上面说的 IO多路复用 。IO多路复用本质上是在同一个线程或进程中,通过拨动开关的方式来执行多个IO操作。注意实际上每个IO操作都是独立进行的。只是由原来的一对一变成了多对多。
在 Linux 主要有 3 种实现 : select、poll、epoll
select 、poll : 开启一个线程,隔一段时间去询问你是否有完成操作 ,如果完成了,你就去执行。
epoll : 当你可以使用的时候,你发消息去通知,然后执行 。
Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。Redis提高数据库容量的办法有两种:一种是可以将数据分割到多个Redis Server上;另一种是使用虚拟内存把那些不经常访问的数据交换到磁盘上。需要特别注意的是Redis并没有使用OS提供的Swap,而是自己实现。
Redis为了保证查找的速度,只会将value交换出去,而在内存中保留所有的Key。所以它非常适合Key很小,Value很大的存储结构。如果Key很大,value很小,那么vm可能还是无法满足需求。
相关配置 :
事后我我下去又翻了许多资料,主要总结出一下内容 :
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,所以 Redis 是单线程的。
IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程。
这里可能有不理解的地方,我尝试说一下我的理解 :
进程执行都是顺序执行的,当我们在执行一个操作的时候,进程可能阻塞,此时进程就阻塞在这个调用上,不能执行其他操作。有没有什么解决办法呢 ? 有! 就是上面说的 IO多路复用 。IO多路复用本质上是在同一个线程或进程中,通过拨动开关的方式来执行多个IO操作。注意实际上每个IO操作都是独立进行的。只是由原来的一对一变成了多对多。
在 Linux 主要有 3 种实现 : select、poll、epoll
select 、poll : 开启一个线程,隔一段时间去询问你是否有完成操作 ,如果完成了,你就去执行。
epoll : 当你可以使用的时候,你发消息去通知,然后执行 。
Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。Redis提高数据库容量的办法有两种:一种是可以将数据分割到多个Redis Server上;另一种是使用虚拟内存把那些不经常访问的数据交换到磁盘上。需要特别注意的是Redis并没有使用OS提供的Swap,而是自己实现。
Redis为了保证查找的速度,只会将value交换出去,而在内存中保留所有的Key。所以它非常适合Key很小,Value很大的存储结构。如果Key很大,value很小,那么vm可能还是无法满足需求。
相关配置 :
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询