当然是为了读取快呀。Redis诞生之后,就被作为memcached接班人而寄予厚望,而不是做数据持久层的产品。据偶了解,不止是BAT,现在很多外企也在使用redis来做缓存。
为什么要用redis做缓存,当然是因为它强大的快速读取能力。
接下来大家简单分析,redis为什么能够这么快的读取,自然也就明白,为什么redis的设计者要把数据放在内存中。
单线程的RedisBAT的一个对redis有很深了解的高级工程师曾经说过,redis就是如果所有数据都在内存里,那么单线程是效率最高的。为什么这么说呢,多线程的本质是CPU模拟出多个线程去操作,但是模拟是有代价的,学过操作系统的朋友应该知道,多线程之间切换是要切换上下文的,这也是对时间的一种消耗。所以,对于单处理器来说,当然是单线程,无切换才是最高效率的。redis就是用一块CPU绑定了一块内存,然后对数据的操作都是在这块内存上进行的,基于此,单线程的redis已经达到了效率最大化。
IO多路复用Redis能够实现快读取的另一个原因就是实现了IO多路复用。举个例子来辅助理解,在餐馆吃饭,通常是入座后自己看菜单,等到有需要的时候,喊服务员来帮你下单。就算饭店是满员的,不考虑上菜这个环节对服务员的消耗,这个时候,1个服务员也是足够为多个餐桌服务的。这个场景,就算多个餐桌对一个服务员的复用,与为每个餐桌配一个服务员比起来,明显节约了人力资源,也减少了由于服务员过多时,与后台通信时排队的等待时间。
进一步说,如果下完单,菜就在后厨制作,然后由服务员直接去点菜台拿,当然要比服务员还要跑到隔壁(数据存储在MySQL或者ES)去拿要快得多。
所以,数据当然还是放在缓存(厨房),而不是持久层(别人家厨房)里快。
以上是偶的浅见,欢迎各位在下方评论与偶交流。
偶是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注偶,与偶共同进步。
爱奇艺15元会员怎么开,tm域名证书怎么领取,苹果手机怎么用蓝牙传视频