Redis 学习笔记四:Redis 并发很多的请求时候如何变得很快的呢?
Redis 学习笔记四:Redis 并发很多的请求时候如何变得很快的呢?
作者:Grey
原文地址:
博客园:Redis学习笔记四:Redis 并发很多的请求时候如何变得很快的呢?
CSDN:Redis 学习笔记四:Redis 并发很多的请求时候如何变得很快的呢?
原因
-
内存操作
-
使用IO多路复用
-
非CPU密集型任务,Redis的瓶颈在于内存和网络带宽。
我怎么提高多核CPU的利用率?
CPU不太可能是Redis的瓶颈,一般内存和网络才有可能是。 例如使用Redis的管道(pipelining)在liunx系统上运行可以达到500K的RPS(requests per second) ,因此,如果您的应用程序主要使用O(N) 或者O(log(N)) 的命令,他们几乎不需要使用什么CPU。
然而,为了最大限度的使用CPU,可以在同一个服务器部署多个Redis的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的,
所以,如果你想使用多个CPU,你可以考虑一下分片(shard) 。。
在Redis的客户端类库里面,比如RB(Ruby的客户端)和Predis(最常用的PHP客户端之一),能够使用一致性哈希(consistent hashing)来处理多个Redis实例。
摘自Redis.cn FAQ:http://www.redis.cn/topics/faq.html
-
单线程的优势
- 避免上下文切换引起的 CPU 消耗
- 没有了访问共享资源加锁的性能损耗
- 没有了线程销毁和创建的性能消耗
-
多线程优化
Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。但如果严格来讲从Redis4.0之后并不是单线程,除了主线程外,它也有后台线程在处理一些较为缓慢的操作,例如清理脏数据、无用连接的释放、大 key 的删除等等。
Redis 4.0之后,Redis引入了lazyfree的机制,提供了unlink、flushall aysc、flushdb async等命令和lazyfree-lazy-eviction、lazyfree-lazy-expire等机制来异步释放内存,它主要是为了解决在释放大内存数据导致整个redis阻塞的性能问题。
Redis 6.0,Redis又引入了多线程来完成请求数据的协议解析,进一步提升性能。它主要是解决高并发场景下,单线程解析请求数据协议带来的压力。请求数据的协议解析由多线程完成之后,后面的请求处理阶段依旧还是单线程排队处理,见Redis 6.0 新特性-多线程连环13问!
参考资料
相关文章
- 源码面前没有秘密,推荐 9 个带你阅读源码的开源项目
- 面试反杀「GitHub 热点速览 v.21.33」
- 实现工具自由,开源的桌面工具箱
- 面试官问:ZooKeeper 有几种节点类型?别再说 4 种啦!
- 横趟!面试中遇到的 ZooKeeper 问题
- 感谢 Vue.js 拯救我这个前端渣渣,让 PowerJob 有了管理后台界面
- mysql 根据出生日期计算年龄
- 自定义Oauth2.0返回值、及异常处理格式切面类
- 【译】我们对 2023 年核心页面指标的建议
- Node.js躬行记(26)——接口拦截和页面回放实验
- 【译】2022 年回顾:Web 性能有哪些新变化?
- 稳中求进的2022年
- 数据化运营初探
- HTML躬行记(4)——Web音视频基础
- HTML躬行记(3)——WebRTC视频通话
- HTML躬行记(2)——WebRTC基础实践
- 前端稳定性建设
- 前端利器躬行记(8)——VSCode插件研发
- 带团队后的日常思考(十)
- 性能参数和优化手段