redis怎样解决高并发

如题所述

1.Redis存取数据是基于内存的,而内存的读写速度非常快,这是前提。
2.Redis是单线程的,省去了很多切换线程的时间消耗。(PS:Redis单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多线程。PPS:目前新版的Redis分支也在深入的探索多线程的方式,理论效率要高于目前市面上的稳定版本。)
3.Redis采用网络IO多路复用技术(非阻塞IO)来保证在多连接的时候,系统的高吞吐量。而非阻塞IO,其内部实现采用了epoll并结合了本身实现的简单的事件框架,epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性极大的节省了在处理IO上的时间。(PS:多路复用指的是多个socket连接复用一个线程。而epoll是目前最好的多路复用技术,所以使用epoll实现多路I/O复用技术可以让单个线程高效的处理多个连接请求,从而达到尽量减少网络IO的时间消耗)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-26
Redis是个单线程程序!这点必须铭记。

也许你会怀疑高并发的Redis 中间件怎么可能是单线程。很抱歉,它就是单线程,你的怀疑暴露了你基础知识的不足。莫要瞧不起单线程,除了Redis 之外,Node.js 也是单线程,Nginx也是单线程,但是它们都是服务器高性能的典范。

Redis单线程为什么还能这么快?

因为它所有的数据都在内存中,所有的运算都是内存级别的运算。正因为Redis是单线程,所以要小心使用Redis 指令,对于那些时间复杂度为O(n) 级别的指令,- -定要谨慎使用,一不小心就可能会导致Redis 卡顿。

Redis单线程如何处理那么多的并发客户端连接?

这个问题,有很多中高级程序员都无法回答,因为他们没听过多路复用这个词汇,不知

道select 系列的事件轮询API, 没用过非阻塞IO。

非阻塞IO
第2个回答  2018-04-18
redis是以单进程的形式运行的,命令是一个接着一个执行的,能很好的解决程序的并发问题
所以在当数据涉及并发问题 比如秒杀 我们就是把数据线存进redis 然后用户请求的时候在redis中减库存redis是单线程所以不会减超 redis减成功了之后就拒绝之后的请求然后在数据库减库存 这样就不会出现库存为负的问题 这就是基本的运作原理本回答被网友采纳
第3个回答  2019-11-08
部署redis集群啊 一个redis服务每秒读10万条数据(官网说的,应该是理想环境,自己测其实就2/3/4万左右),你每秒处理100万条数据,那你就部署redis集群啊,每个redis每秒处理3万,那你就需要部署100/3个redis服务,也就是多开100/3个端口。
相似回答