Redis6.0使用了多线程还能保证线程安全么?-Redis6.0 多线程精讲
2023-02-18 16:38:05 时间
B站(乐哥聊编程)有完整配套视频,免费观看
为什么引入多线程?
有很多同学就有疑问了,既然官方都表示CPU不是Redis的性能瓶颈,那么为什么还要引入多线程呢?虽然单线程有很多优点,但对应的也必然会有一些缺点存在:
- 只能使用CPU的单核
- 如果删除的key过大(set 里面有一堆key),会导致服务端阻塞(后面通过LazyFree机制)
- QPS难以提高
但是redis并没有直接上多线程IO去处理这些,而是在多线程之前引入了LazyFree机制
引入多线程的优点
- 充分利用CPU资源
- 多线程任务有利于分担Redis同步IO读写的负荷
LazyFree
lazyFree 主要包括有:flushDb操作,flushall,berewriteaof,删除大key等操作,采用多线程去单独做这些事情,主线程只负责关系的解除,子线程在后台默默的异步执行这些耗时的操作。
多线程模型
- 主线程接收到客户端的连接请求,获取socket放入等待队列
- 主线程判断等待队列已满,则通过轮询的方式,将这些连接分配给线程组
- 主线程等待IO线程执行读取socket完毕
- IO线程读取socket完毕之后,主线程开始执行redis命令
- 将执行结果写入缓冲区
- 阻塞等待IO线程将数据写入socket
- 等待IO线程写入完毕,主线程清空队列,解绑关系,等待后续的连接请求
redis多线程安全么?
安全的 一句话总结:多线程只用在了IO读写上面,redis命令执行还是单线程执行。
相关文章
- [NetWork] OSI七层模型概述
- 认识spring security
- 基于jpa的specification实现动态查询
- 使用vuex简单的实现系统中的状态管理
- elasticsearch的索引重建
- elasticsearch嵌套对象的映射
- elasticsearch的bulk(批量)操作
- elasticsearch入门(简单的crud操作)
- elasticsearch的dsl查询
- elasticsearch的索引操作
- activemq实现队列的独有消费
- 扩展spring data jpa的repository
- poi实现生成下拉选联动
- poi实现生成下拉选
- springboot多配置环境
- springboot读取配置文件中的信息
- springboot入门
- ssm三大框架整合
- redis实现分布式锁
- spring cache整合redis