Redis为什么这么快,redis为什么快

Redis为何设计为单线程?

Redis为什么这么快,redis为什么快


redis的一个特点是读写速度快,这就很容易让人误以为redis是多线程的 。因为大家想当然的会认为多线程的效率要比单线程高,其实不然 。BAT的一个对redis有很深了解的高级工程师曾经说过,redis就是如果所有数据都在内存里,那么单线程是效率最高的 。为什么这么说呢,多线程的本质是CPU模拟出多个线程去操作,但是模拟是有代价的,学过操作系统的朋友应该知道,多线程之间切换是要切换上下文的,这也是对时间的一种消耗 。
所以,对于单处理器来说,当然是单线程,无切换才是最高效率的 。redis就是用一块CPU绑定了一块内存,然后对数据的操作都是在这块内存上进行的,基于此,单线程的redis已经达到了效率最大化 。我们用实际数据来说明 。一次CPU内存的切换大约需要1500ns,从内存中读取1MB的数据,大概需要250us,就算我一次只读1MB的数据,读1000次之后,消耗在内存切换上这种非功能性过程上的消耗就达到了1500us,这个时间开销任谁看都是不值 。
【Redis为什么这么快,redis为什么快】此外,基于redis的单线程,我们还可以利用它提供的set key field value加nx参数的方式,来实现分布式锁 。众所周知,redis并不适合做数据持久层,更多的是取代memcache做缓存,做分布式架构的支撑 。分布式架构势必就要面临如何实现分布式锁的问题,通过上面的接口,无论多少个分布式节点,都可以准确的获取分布式锁 。
具体使用方式如下:通常来说,set函数是不管field字段是否存在,只要写入成功就会返回1,但是如果增加了NX参数,那么如果field值在redis中已经存在,就会返回空,否则才返回1 。因此用这个函数来执行获取分布式锁操作,如果返回值不为空,则加锁成功,否则代表有其他线程在操作数据,当前请求需要等待 。
redis为什么把数据放到内存中?
Redis为什么这么快,redis为什么快


这个问题问得有问题!!首先,redis确实是一个内存型的数据库系统,把大量数据在内存中使用,并快速存取,但是,redis提供了以数据库文件的方式持久化数据的选择,通过使用bgsave,save等命令,可以把缓存中的数据存储到磁盘中进行永久性保存!把题目换种问法!为什么内存读取比磁盘读取数据速度快?1,内存是电器元件,利用高低电平存储数据,而磁盘是机械元件(去买电脑的时候写着5400r/min或者7200r/min),电气原件速度超级快,而磁盘因为在每个磁盘块切换的时候,磁头会消耗比较多的时间,也就是IO时间长,所以性能没发比!2,磁盘的数据进行操作的时候也都是读取到内存中,由CPU进行操作的,所以直接放在内存中的数据,读取速度肯定快了很多很多!那么内存有哪些缺点呢?1,丢数据:内存因为是存储的高低电平,断电之后数据全部丢失,而磁盘存储了二进制文件,断电以后数据依然存在!2,内存贵:一块4G的内存和一个500g的磁盘价格差不多,因为内存设计工艺要求更高,材料也更加昂贵!所以,不仅仅是redis,几乎所有的缓存系统都会先用到内存作为数据快速读取的基本保证,然后才能有扩展数据持久化的可能!redis作为分布式的可持久化的单线程的key-value缓存系统,有着大量的优点,吸引着广大开发者的关注,同时在保证数据一致性等问题上通常作为首选条件!关于redis集群,指令,开启持久化,防止内存穿透等问题,之后会有提及,敬请关注 。

推荐阅读