1. 基于内存存储
    Redis是一个开源的内存中的数据结构存储系统,redis也提供持久化的选项可以持久话到磁盘里面(可以通过命令)正是因为redis是内存中的数据结构存储体系所以他是不受io限制的,每一次CPU进行一次IO读去一个数据块是非常耗时间的(直接在内存中读取和在磁盘中读取大概相差40多倍)看看下面的这两张图真的是太直观了。
    拓展一下:
    第一张图说的是数据库的: 储存索引的话也就是咋们创键索引的时候在内存中存储的B+树 其叶子结点指向的是磁盘中的数据块,之所以使用B+树 原因之一就是因为B+树可以减少IO的次数

  2. 单线程
    避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
    官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)

  3. IO/多路复用 ,非阻塞IO
    多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。
    这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。
    个人感觉很难理解,但是看到大神的例子:
    阻塞IO
    给女神发一条短信, 说我来找你了, 然后就默默的一直等着女神下楼, 这个期间除了等待你不会做其他事情, 属于备胎做法.

非阻塞IO,
给女神发短信, 如果不回, 接着再发, 一直发到女神下楼, 这个期间你除了发短信等待不会做其他事情, 属于专一做法.

IO多路复用,
是找一个宿管大妈来帮你监视下楼的女生, 这个期间你可以做其他的事情. 例如可以顺便看看其他妹子,玩玩王者荣耀, 上个厕所等等. IO复用又包括 select, poll, epoll 模式. 那么它们的区别是什么?
1) select大妈 每一个女生下楼, select大妈都不知道这个是不是你的女神, 她需要一个一个询问, 并且select大妈能力还有限, 最多一次帮你监视1024个妹子
2) poll大妈不限制盯着女生的数量, 只要是经过宿舍楼门口的女生, 都会帮你去问是不是你女神
3) epoll大妈不限制盯着女生的数量, 并且也不需要一个一个去问. 那么如何做呢? epoll大妈会为每个进宿舍楼的女生脸上贴上一个大字条,上面写上女生自己的名字, 只要女生下楼了, epoll大妈就知道这个是不是你女神了, 然后大妈再通知你.
上面这些同步IO有一个共同点就是, 当女神走出宿舍门口的时候, 你已经站在宿舍门口等着女神的, 此时你属于阻塞状态
接下来是异步IO的情况
你告诉女神我来了, 然后你就去王者荣耀了, 一直到女神下楼了, 发现找不见你了, 女神再给你打电话通知你, 说我下楼了, 你在哪呢? 这时候你才来到宿舍门口. 此时属于逆袭做法

  1. 独特的符合场景的五种数据类型
    支持多种类型的数据结构,如字符串(Strings),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间(Geospatial)索引半径查询。其中常见的数据结构类型有:String、List、Set、Hash、ZSet这5种

转载:https://blog.csdn.net/weixin_40413961/article/details/100415891

redis为什么快?相关推荐

  1. 字节跳动面试真题:Redis为什么快?

    前言 大家好,有位伙伴面试了字节(四年半工作经验),分享下面试真题,大家一起加油哈. 说说Redis为什么快 Redis有几种数据结构,底层分别是怎么存储的 Redis有几种持久化方式 多线程情况下, ...

  2. 面试官问我为什么Redis这么快,我.......

    开课开课~ 面试官:为什么项目中用Redis? 我:当然是因为Redis好啊 面试官:emmm.....那Redis哪里好? 我:因为Redis快啊. 面试官:(这小伙子有点彪啊...)那为什么Red ...

  3. 一文深入了解 Redis 内存模型,Redis 的快是有原因的!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:编程迷思 cnblogs.com/kismetv/p/865 ...

  4. 五大点,搞懂单线程的Redis到底快在哪里

    目录 前言 一.开发语言 二.纯内存访问 三.数据结构简单 四.单线程 五.非阻塞多路I/O复用机制 前言 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可 ...

  5. 四个大点,搞懂 Redis 到底快在哪里?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:http://1t.click/jnt >>阿里云8月最新优惠,点击查看& ...

  6. redis 内存不足 排查_一文深入了解 Redis 内存模型,Redis 的快是有原因的!

    前言 一.Redis内存统计 二.Redis内存划分 1.数据 2.进程本身运行需要的内存 3.缓冲内存 4.内存碎片 三.Redis数据存储的细节 1.概述 2.jemalloc 3.redisOb ...

  7. 面试还搞不懂Redis,快看看这40道面试题!| 博文精选

    作者| 程序员追风 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 近年来,微服务变得越来越热门,越来越多的应用部署在分布式环境中.常用的分布式实现方式之一就有 Redis ...

  8. 单线程多线程_面试系列 redis为什么快amp;单线程amp;多线程

    redis为什么这么快 C语言实现,执行速度快 纯内存操作,数据读写在内存中,异步持久化到磁盘 丰富和高效的数据结构 基于非阻塞的I/O多路复用机制 单线程避免了上下文切换 Redis单线程 redi ...

  9. 比 Redis 还快,更省内存,惊爆了!

    点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 最近,一位前谷歌.前亚马逊的工程师推出了他创作的开源内存数据缓存系统 Drago ...

  10. 比 Redis 还快,更省内存,开源,惊爆了!

    今年年中,一位前谷歌.前亚马逊的工程师推出了他创作的开源内存数据缓存系统 Dragonfly,用 C/C++ 编写,基于 BSL 许可(Business Source License)分发. 根据过往 ...

最新文章

  1. 【shell变量替换】
  2. 统计学常犯的18个错误,请务必跳过这些坑!
  3. QT的QMainWindow类的使用
  4. idea中右侧的Maven框消失了
  5. ssl1056-金明的预算方案【dp之有依赖的背包】
  6. 将读写锁放到共享内存,实现进程之间对于同一文件的读写操作
  7. JAVA获取服务器路径的方法
  8. 由于BOM头导致的Json解析出错
  9. LeetCode Search a 2D Matrix
  10. ListView的Item点击事件(消息传递)
  11. 微信分享ios 不显示图片和简介问题总结
  12. linux 字符驱动 tty,打通linux的tty驱动的数据链路
  13. f1c100s 源码_F1C100s 数据手册Datasheet V1_0
  14. 第10章:项目沟通管理和干系人管理-章节真题
  15. 使用tvp.player_v2_zepto.js播放腾讯视频
  16. php手机号正则替换中间四位
  17. 在使用selenium 做IE自动化操作时 请求状态码 400【帮忙解决或者找出问题所在悬赏200】
  18. 抓包精灵app使用教程
  19. HTML+CSS的基础复习篇~
  20. Android 流量分析API

热门文章

  1. Android P update_engine分析(三) --boot_control的操作
  2. 阿里云telnet 3306端口失败
  3. C语言实现json文本解析
  4. [28期] 坚定信念,抗战二十年
  5. vue运行(Emitted value instead of an instance of Error)
  6. 怎样用MATLAB画二次函数曲线,matlab画二次函数图像
  7. CTF PWN-攻防世界XCTF新手区WriteUp
  8. win10桌面频繁刷新
  9. U-BOOT中mmc命令简介
  10. Anaconda虚拟环境中,让Python3使用ROS的cv_bridge