redis单线程为什么快?有多快?

阳光 2020-12-28 22:22:45 java常见问答 6768

我们知道Redis是一个开源的内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,最近有很多小伙伴不清楚redis单线程为什么快?那么今天我们就来给大家讲解一下这方面的内容。

1、纯内存操作,避免大量访问数据库,减少直接读取磁盘数据,redis将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度快;

2、单线程操作,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

3、采用了非阻塞I/O多路复用机制

用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。这样用户可以注册多个socket,然后不断地调用select读取被激活的socket,redis服务端将这些socke置于队列中,然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中,提高读取效率。

采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作,从而提高效率。

4、灵活多样的数据结构。

redis内部使用一个redisObject对象来表示所有的key和value。redisObject主要的信息包括数据类型、编码方式、数据指针、虚拟内存等。它包含String,Hash,List,Set,Sorted Set五种数据类型,针对不同的场景使用对应的数据类型,减少内存使用的同时,节省网络流量传输。

有多快?

redis的每秒查询次数可以达到10w+。但是随着连接数的增加,每秒的查询数会进行减少。通一个服务器多个连接数导致。

redis单线程快的主要原因就是以上这几点了,redis每秒可达到10w+,可以说速度是非常快了,这些知识点大家一定要掌握哦!最后大家如果想要了解更多其他工具教程知识,敬请关注奇Q工具网。

推荐阅读:

java Redis持久化机制是什么?内部结构是怎样的?

java中热点数据是什么?Memcache与Redis的区别是什么?

java spring boot中怎么使用redis?详细解析