1. 纯内存操作,肯定快

数据存储在内存中,读取的时候不需要进行磁盘的 IO

2. 单线程,无锁竞争损耗

单线程保证了系统没有线程的上下文切换

使用单线程,可以避免不必要的上下文切换和竞争条件,没有多进程或多线程引起的切换和 CPU 的消耗,不必考虑各种锁的问题,没有锁释放或锁定操作,不会因死锁而降低性能;

3. C 语言实现,更接近底层操作

Redis 是用 C 语言开发完成的

4. 多路 I/O 复用模型,非阻塞 IO

采用多路 I/O 复用技术可以让单个线程高效的处理多个网络连接请求(尽量减少网络 IO 的时间消耗)

非阻塞 IO 内部实现采用 epoll,采用了 epoll+自己实现的简单的事件框架。epoll 中的读、写、关闭、连接都转化成了事件,然后利用 epoll 的多路复用特性,绝不在 io 上浪费一点时间。

5. 数据结构简单,底层又做了优化

数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;

6. 源码精湛、简短

扩展:

在 Redis 中,常用的 5 种数据结构和应用场景

  • String: 缓存、计数器、分布式锁等。
  • List: 链表、队列、微博关注人时间轴列表等。
  • Hash: 用户信息、Hash 表等。
  • Set: 去重、赞、踩、共同好友等。
  • Zset: 访问量排行榜、点击量排行榜等。

多路 I/O 复用模型

多路 I/O 复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。

采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响 Redis 性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

参考文章:

Redis 为什么这么快?

一文揭秘单线程的 Redis 为什么这么快?

Redis 数据类型及应用场景

视频 | IO 多路复用 select/poll/epoll 介绍

Redis 是单线程的,但 Redis 为什么这么快?

个人公众号《骇客与画家》,欢迎关注

最新文章

  1. Redis模式匹配删除key
  2. JS获取地址栏参数的方法
  3. linnux 3
  4. js 滚动加载iframe框中内容
  5. 穹举,迭代,while循环。
  6. Build better apps: Windows 10 by 10 development series
  7. 转:从编译链接过程解析static函数的用法
  8. GNU C 扩展(转)
  9. C/C++ 中 const 修饰符用法总结
  10. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
  11. CTSC2017总结
  12. 乘法原理,加法原理,多重集的排列数(多个系列操作穿插的排列数) 进阶指南 洛谷p4778
  13. MySQL--CREATE INDEX在各版本的优化
  14. jar各个版本号的意义
  15. noip第23课作业
  16. 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破
  17. 题目1446:Head of a Gang(并查集操作)
  18. iptable防火墙案例
  19. 【数据库_Postgresql】sql查询结果添加序号列
  20. popViewControllerAnimated 后的刷新问题

热门文章

  1. lisp学习总结(二)-----lisp应该探索发展的方向
  2. Spring Cloud学习之-什么是Spring Cloud?
  3. 在qemu-kvm配置桥接网络
  4. Android的学习之路一
  5. centos7下redis安全相关
  6. iperf安装使用教程
  7. Git详解之安装
  8. CUDA学习(七)之使用CUDA内置API计时
  9. 通过域名直接访问Linux服务器中的项目
  10. 网络收发与Nginx事件间的对应关系