Redisv6.0为何引入多线程

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redisv6.0为何引入多线程

优势

每修改同步:appendfsync always 同步持久化,每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好
每秒同步:appendfsync everysec 异步操作,每秒记录,如果一秒内宕机,有数据丢失
不同步:appendfsync no 从不同步
劣势

相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
如何选择RDB和AOF

如果是数据不那么敏感,且可以从其他地方重新生成补回的,那么可以关闭持久化。
如果是数据比较重要,不想再从其他地方获取,且可以承受数分钟的数据丢失,比如缓存等,那么可以只使用RDB。
如果是用做内存数据库,要使用Redis的持久化,建议是RDB和AOF都开启,或者定期执行bgsave做快照备份,RDB方式更适合做数据的备份,AOF可以保证数据的不丢失。
Redis4.0 对于持久化机制的优化

Redis4.0相对与3.X版本其中一个比较大的变化是4.0添加了新的混合持久化方式。
优势:混合持久化结合了RDB持久化 和 AOF 持久化的优点, 由于绝大部分都是RDB格式,加载速度快,同时结合AOF,增量的数据以AOF方式保存了,数据更少的丢失。

劣势:兼容性差,一旦开启了混合持久化,在4.0之前版本都不识别该aof文件,同时由于前部分是RDB格式,阅读性较差。
Redisv6.0为何引入多线程?
很简单,就是 Redis的网络 I/O 瓶颈已经越来越明显了。

随着互联网的飞速发展,互联网业务系统所要处理的线上流量越来越大,Redis的单线程模式会导致系统消耗很多 CPU 时间在网络 I/O 上从而降低吞吐量,要提升 Redis的性能有两个方向:

优化网络 I/O 模块
提高机器内存读写的速度
后者依赖于硬件的发展,暂时无解。所以只能从前者下手,网络 I/O 的优化又可以分为两个方向:

零拷贝技术或者 DPDK 技术
利用多核优势
零拷贝技术有其局限性,无法完全适配 Redis这一类复杂的网络 I/O 场景,更多网络 I/O 对 CPU 时间的消耗和 Linux 零拷贝技术。而 DPDK 技术通过旁路网卡 I/O 绕过内核协议栈的方式又太过于复杂以及需要内核甚至是硬件的支持。

因此,利用多核优势成为了优化网络 I/O 性价比最高的方案。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5月前
|
编译器 Linux 调度
|
1月前
|
数据处理 调度 开发者
QML多线程魔法:探索不同方法,提升性能
QML多线程魔法:探索不同方法,提升性能
173 0
|
8月前
多线程的三种实现代码
多线程的三种实现代码
50 0
|
8月前
多线程的线程工具的初步使用和原理详解
多线程的线程工具的初步使用和原理详解
46 0
|
3月前
|
安全 Java Python
多线程和并发编程:在Python中,GIL(全局解释器锁)的作用是什么?为什么它会影响多线程程序的性能?举例说明在Python中使用线程池的优点,并编写一个简单的线程池实现。
多线程和并发编程:在Python中,GIL(全局解释器锁)的作用是什么?为什么它会影响多线程程序的性能?举例说明在Python中使用线程池的优点,并编写一个简单的线程池实现。
|
5月前
|
存储 安全 编译器
|
5月前
|
Java 调度
多线程学习之多线程的三种实现方式及应用
多线程学习之多线程的三种实现方式及应用
33 0
|
9月前
|
缓存 Java 数据库
项目中使用多线程的场景,多线程的优缺点
项目中使用多线程的场景,多线程的优缺点
113 0
|
9月前
|
Java 数据处理
多线程永动任务设计与实现
多线程永动任务设计与实现
|
10月前
|
存储 Java C++
多线程的2种实现方式
多线程的2种实现方式
79 0

热门文章

最新文章