点击上方关注 “终端研发部”
设为“星标”,和你一起掌握更多数据库知识
首发于我的知乎:终端研发部
首先肯定一点的是redis确实是单线程模型,其所有的操作是单线程模型的,既然是单线程,去了很多上下文切换线程的时间,也就是说避免线程切换的资源消耗。
这个问题可以从redis的数据结构,线程模型,以及基于内存的方式回答!
基于内存
redis 是基于内存的,内存的读写速度非常快(纯内存),
数据存在内存中,数据结构用 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是 O(1)。
数据结构
Redis常用的有5种基础数据结构,分别为:string(字符串)、list(列表)、set(集合)、hash(哈希)和zset(有序集合)
能支持各种数据结构的支持

多路IO复用
1、使其可以可以高效的处理多个连接请求,既支持了高并发,同时也减少了网络IO的消耗时间。
2、Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大

关于redis的线程模型,之前也写了一篇总结,大家也可以去认真的阅读和学习一下
面试官:Redis为何那么快,请说说 Redis 的线程模型?5 赞同 · 0 评论文章
具体表现在哪?
传统的阻塞 I/O 模型,如果当前 FD 不可读或不可写,整个 Redis 服务就不会对其他的操作作出响应,导致整个服务不可用。

若果这样的会有多路复用模型!最重要的函数调用就是 Select,该方法能够同时监控多个文件描述符的可读可写情况。当其中的某些文件描述符可读或者可写时,

Select 方法就会返回可读以及可写的文件描述符个数。另外其他的 I/O 多路复用函数 Epoll/Kqueue/Evport,它们相比 Select 性能更优秀,同时也能支撑更多的服务!
总结
redis 单线程模型也能效率这么高回答思路
4点:
纯内存操作
数据结构
核心是基于非阻塞的 IO 多路复用机制
单线程反而避免了多线程的频繁上下文切换问题
回答这4点就够的,吼得住3w,吼不住3千
我是小鱼哥
@终端研发部
,一个有规划有思考的程序员,每天都会分享职场经验,技术开发小技巧和面试经验的知识,希望我的回答能够帮助到你哈,笔芯~
回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
用 Spring 的 BeanUtils 前,建议你先了解这几个坑!
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!
一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)
相信自己,没有做不到的,只有想不到的
在这里获得的不仅仅是技术!
喜欢就给个“在看”