当前位置: 首页 > news >正文

Redis高性能原理

        redis大家都知道拥有很高的性能,每秒可以支持上万个请求,这里探讨下它高性能的原理。单线程架构和io多路复用技术。

一,单线程架构

        单线程架构指的是命令执行核心线程是单线程的,数据持久化、同步、异步删除是其他线程在跑的。redis收到客户端的命令是无序的,谁先来谁就先存起来,存到队列中。然后走队列依次取出命令执行。所以并不会产生并发问题。

        那么为什么单线程反而很快呢?

        1,纯内存访问肯定快。

        2,不涉及多线程切换带来的额外开销。

二,io多路复用

        redis实现了reactor模型,利用linux的epoll机制实现了io多路复用的技术。

        那为什么io多路复用技术就性能高呢?

        因为io多路复用可以在一个监控线程里监听很多连接,没有io操作时只需要挂起监控线程,而不用挂起工作线程。只要有io操作事件到达时,就会唤起监听线程进行处理,而不用轮训判断是否有数据到达。我们试想下并发的连接可能成千上万,如果每个都开个线程处理系统肯定承受不了。就算用线程池,那么线程在阻塞等待时也什么都干不了,而且开几百个线程频繁切换性能也有问题。 

        reactor模型有三个事件:连接事件,读事件,写事件。三个角色:reactor(反应者)、acceptor(接收者)、处理者。

reactor监听事件,如果是连接事件则将事件分给acceptor。acceptor建立连接后创建处理器用于后续读写处理。如果是读写事件时则直接分给handler处理。

常见的慢操作

既然它是单线程架构,那么线程一旦阻塞就会导致后续操作变慢。

1,操作大对象的命令肯定慢。应该将数据拆分到多个key中。

2,keys、sort命令会进行较大计算,会导致阻塞。

3,一些批量操作的命令应该谨慎使用,会导致去多节点取数据,也比较耗时。

http://www.lryc.cn/news/304593.html

相关文章:

  • MSS与cwnd的关系,rwnd又是什么?
  • 解决两个MySQL5.7报错
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道
  • 机器人初识 —— 电机传动系统
  • 安卓游戏开发之音频技术优劣分析
  • 在C语言中,设置Linux系统时间
  • golang k8s包管理工具
  • 数字信号处理:傅里叶分析
  • pat 甲级 1051 Pop Sequence
  • Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)
  • Rust-知多少?
  • Qt不规则可移动窗体的实现
  • Jakarta Bean Validation
  • Flink Catalog 解读与同步 Hudi 表元数据的最佳实践
  • git 使用总结
  • 【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么
  • Linux、Ubuntu、CenterOS、RedHat、Debian、AIpine关系和区别?
  • 微信小程序开发:通过wx.login()获取用户唯一标识openid和unionid
  • 设计模式之模板方法
  • Tubi 故事|中国团队本地管理队伍的形成
  • 微服务篇之任务调度
  • 提取游戏音频文件.bnk
  • React 模态框的设计(三)拖动组件的完善
  • wondows10用Electron打包threejs的项目记录
  • git的master、develop、feature分支分别是做什么用的?有什么区别和联系?
  • 前端基础面试题
  • docker自定义网络实现容器之间的通信
  • NLP_构建GPT模型并完成文本生成任务
  • 使用puppeteer完成监听浏览器下载文件并保存到自己本地或服务器上完成上传功能
  • 软件压力测试:测试方法与步骤详解