携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
前言
- IO多路复用中有三种方式:select,poll,epoll。需要注意的是,select,poll是线程不安全的,epoll是线程安全的。
redis快
-
redis很快这是大家都知道的特性,那么为什么那么快呢?你肯定会说因为他是放在内存里的,内存操作速度很快所以redis很快。没错这就是标准答案。
-
除了内存操作以外,redis还为我们提供了很多的优化。采用单线程,避免了不必要的上下文切换和竞争条件。
-
redis具体的实现采用epoll,而epoll是线程安全的,所以redis是不是安全的你应该知道了吧。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间 这3个条件不是相互独立的,特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能可想而知了。应该说redis为特殊的场景选择了合适的技术方案。
-
那么redis是如何在单线程下进行多线程一样的功能的呢?在需要垃圾清理的时候我们呢就是类似JVM一样进行stop-the-world.但是redis并不是毫无节制的停止功能。而是给定限定时间如果无法完成redis会采用分段的机制来完成的。也就是说就算卡顿也只会卡顿一定时间处理不完redis也会让出时间的。
-
之前忘记说了,redis支持的类型非常的丰富=支持string,list,set,sorted set,hash支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
总结
- redis为了节省空间提供了五大类型。为了提供安全的服务他们使用e poll多路复用