导语

我们都知道,随着并发数量的上升,直接查询数据库是不现实的,因此有了Redis,用其来做缓存,这样可以减轻数据库的压力,不用所有的请求都打在数据库上。那为什么查询Redis要比数据库快呢?今天就和大家讨论一下这个问题,下面我总结几点我可以想到了,如果大家还有补充,可一列在讨论区里,谢谢指正!

Redis为什么这么快?

  • 内存存储: Redis是使用内存(in-memeroy)存储,没有磁盘IO上的开销。数据存在内存中,类似于HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1)
  • 单线程实现(Redis 6.0以前): Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。注意:单线程是指的是在核心网络模型中,网络请求模块使用一个线程来处理,即一个线程处理所有网络请求。
  • 非阻塞IO: Redis使用多路复用IO技术,将epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
  • 优化的数据结构:Redis有诸多可以直接应用的优化数据结构的实现,应用层可以直接使用原生的数据结构提升性能。
  • 使用底层模型不同:Redis直接自己构建了VM(虚拟内存)机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

Redis的VM(虚拟内存)

  • Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。
  • Redis提高数据库容量的办法有两种:一种是可以将数据分割到多个RedisServer上;另一种是使用虚拟内存把那些不经常访问的数据交换到磁盘上。需要特别注意的是Redis并没有使用Os提供的Swap,而是自己实现。

Redis 为啥这么快?相关推荐

  1. 面霸:Redis 为什么这么快?

    以下文章来源方志朋的博客,回复"666"获面试宝典 Redis 为什么这么快? 很多人只知道是 K/V NoSQl 内存数据库,单线程--这都是没有全面理解 Redis 导致无法继 ...

  2. Redis为什么那么快

    文章目录 前言 宏观层面 微观层面 SDS quicklist listpack 哈希表 整数集合 跳表 总结 前言 Redis(Remote Dictionary Server ),即远程字典服务, ...

  3. 硬核!15张图解Redis为什么这么快

    作者|莱乌 作为一名服务端工程师,工作中你肯定和 Redis 打过交道.Redis 为什么快,这点想必你也知道,至少为了面试也做过准备.很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原 ...

  4. socket什么意思_浅析Redis为什么这么快

    Redis作为一种Key-Value形式的NoSQL,因其极高的读写速度深受开发者喜爱,在web.分布式等领域有非常广泛的应用. 根据runoob的介绍, Redis能读的速度是110000次/s,写 ...

  5. 四、redis比mysql快的原因

    redis比mysql快的原因 Mysql数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢: 而Red ...

  6. 02 | 高性能 IO 模型:为什么单线程 Redis 能那么快?

    我们通常说,Redis 是单线程,主要是指Redis 的网络 IO和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程.但 Redis 的其他功能,比如持久化.异步删除 ...

  7. Redis 为什么这么快

    不管你是从事 Python.Java.Go 语言,还是 PHP.Ruby 等等- Redis 都是你应该掌握的中间件之一. Redis 是一个开源的底层使用 C 语言编写的 Key-Value 存储数 ...

  8. linux redis客户端_为什么单线程Redis能那么快?

    我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程.但 Redis 的其他功能,比如持久化.异步 ...

  9. redis 所有模糊key 查询_写完这篇Redis由浅入深剖析快自闭了!

    前言 常用的SQL数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的IO压力,但由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候, ...

最新文章

  1. 希尔排序——算法系列
  2. oracle 创建数据库 表空间 用户 授权和toad导入导出数据库
  3. iOS下KVO使用过程中的陷阱
  4. 逻辑判断 java_写 JS 逻辑判断,不要只知道用 if-else 和 switch
  5. c语言竖等于意思,C语言竖式问题
  6. 如何基于Dataphin实现敏感数据保护
  7. php铺满,重复铺满水印 - Jun. - OSCHINA - 中文开源技术交流社区
  8. python gamma函数_python gamma矫正
  9. Android的图片压缩并上传
  10. Lightroom Classic 教程,如何在 Lightroom 中风格化照片?
  11. 三、 安装项目依赖以及启动项目
  12. MOOC电子科技大学 离散数学 集合论 第一次作业答案
  13. 流体动力matlab仿真,IND4动力总成丨基于MATLAB simulink的液力变矩器仿真建模
  14. 【前端学习笔记】微信小程序vue 组件式开发
  15. go语言打印日期_专访Go语言布道师Dave Cheney:Go语言这十年,只能用“成功”一词总结...
  16. c语言---16 关于goto语句
  17. 适合理工直男的钟平老师逻辑英语学习笔记
  18. 这是一场 DDD 的探索之旅
  19. IMG按图搜索商品详情
  20. 导数公式整理(更新中)

热门文章

  1. java开发转行软件实施理由,技术详细介绍
  2. Unity 3D游戏开发 - U3D入门 | 基本组件之灯光
  3. 如何创建公网NAT网关
  4. c语言课程设计作业红白球,c语言课程设计报告.doc
  5. 常见规格液晶显示器尺寸/点距/分辨率
  6. QQ电脑管家中的远程地址
  7. 论文解读:面向时间感知链接预测的知识嵌入表示(Encoding Temporal Information for Time-Aware Link Prediction)
  8. 360 safe.php,防止网站被黑,增强网站安全文件:360_safe3.php-防SQL注入代码
  9. npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for
  10. CV-特征提取:传统方法