使用redis提高商城并发的原理分析

时间:2022-12-10 09:59:08

一、redis实现高并发机制的原理及redis运行原理图解

使用redis提高商城并发的原理分析

使用redis提高商城并发的原理分析

二、redis为什么可以解决高并发问题

redis高并发和快速的原因:

1、redis是基于内存的操作,内存的读写速度非常快;

redis是基于内存操作的, 内存的读写速度是非常快的, 普通的笔记本电脑,没秒都能处理几十万的请求量. 所以CPU(内存里的操作) 不会成为redis的性能瓶颈. redis的瓶颈最有可能是内存的大小和网络通信能力;

2、redis是单线程的,省去了很多线程上下文切换的时间和消耗;

Redis单线程的优劣势

单进程单线程优势

代码更清晰,处理逻辑更简单

不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗

不存在多进程或者多线程导致的切换而消耗CPU

单进程单线程弊端

无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

3、redis采用IO多路复用技术, 可以处理并发的链接. 采用epoll的多路复用技术,绝对不在IO上浪费一点时间.

IO多路复用技术

redis 采用网络IO多路复用技术,来保证在多连接的时候系统的高吞吐量。

多路-指的是多个socket网络连接,复用-指的是复用一个线程。多路复用主要有三种技术:select,poll,epoll。epoll是最新的、也是目前最好的多路复用技术。

采用多路I/O复用技术:其一,可以让单个线程高效处理多个连接请求(尽量减少网络IO的时间消耗)。其二,Redis在内存中操作数据的速度非常快(内存里的操作不会成为这里的性能瓶颈)。主要以上两点造就了Redis具有很高的吞吐量。

redis使用多路复用技术,可以处理并发的连接(非阻塞IO)。

非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。


三、Redis高并发快总结

Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。

再说一下IO,Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。

Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。

另外,数据结构也帮了不少忙,Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。

还有一点,Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

redis 内部使用文件事件处理器,这个文件事件处理器是单线程的,所以才称redis是单线程的。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。

开源商城推荐:​​点此下载​