仲肥:何为Redis 4.0 ?

简介: 在2018数据库直播大讲堂峰会-Redis专场上,阿里云的仲肥对Redis4.0介绍。仲肥从何为Redis4.0着手,通过与以前Redis版本进行对比,全面详解了4.0无论是在计算速度还是进行删除操作时的计算量亦或者进行大数据树状复制结构时的可靠性方面所具有的优越性。

摘要:在2018数据库直播大讲堂峰会-Redis专场上,阿里云的仲肥对Redis4.0介绍。仲肥从何为Redis4.0着手,通过与以前Redis版本进行对比,全面详解了4.0无论是在计算速度还是进行删除操作时的计算量亦或者进行大数据树状复制结构时的可靠性方面所具有的优越性。
直播视频:https://yq.aliyun.com/video/play/1312
PDF下载:https://yq.aliyun.com/download/2455
以下为精彩视频整理:

何为Redis 4.0?

1

较传统的Redis在大Key删除时容易阻塞、热点Key、info信息不完善等问题,Redis4.0进行了相应的改进,提出了诸如lazy free、LFU&hotKeys、memory和PSYNC2等特性,很好的解决了传统上所面临的问题。

Lazyfree详解

在处理百万级别数据方面,传统领域主要有DEL和FLUSHALL两种方式,但是这两种方式都有耗时较长的缺点。而Lazyfree采用UNLINK的方式来代替DEL,采用FLUSHALL ASYNC的方式来代替FLUSHALL,从而使处理相同数据的耗时从传统的秒级、分钟级降低到目前的毫秒、微秒级别。

2

1.主动删除
Lazyfree主动删除主要有Unlink和FLUSHALL ASYNC两种方式。这两种方式都充分利用BIO线程,相应的删除工作也是在后台进行完成。Unlink的调用路径首先是经过Unlink Command入口,之后到异步删除(dbAsyncDelet)环节,最后在BIO任务中插入相应任务。FLUSHALL ASYNC的调用路径首先是经过(flushdbCommand),之后是emptyDbAsync环节,最后在BIO任务队列中插入相应任务。无论是Unlink还是FLUSHALL ASYNC,高耗时计算都是在BIO中进行,主线程主要负责创建任务。

2.被动删除
Redis的删除方式还包括过期删除(lazyfree-lazy-expire)、内存逐出删除(azyfree-lazy-eviction)隐式删除选项rename(lazyfree-lazy-server-del)和slave全量同步清空数据选项(slave-lazy-flush)被动删除机制,在进行相应删除操作只要进行对应的选择就会将删除工作交由BIO进行操作,降低了主线程消耗,避免阻塞。

如何分析热点Keys?

热点Keys是诸多行业都会遇到的问题,当某些数据访问量比较大时就会形成热点,在4.0之前Redis在热点Keys领域并没有提供一个很好分析方法,在提供的诸多方法中也是存在种种不足,目前Redis4.0提出了基于LFU(Least- Frequently- Used)的热点Keys的发现机制。

3

LFU用来记录单位时间内的访问频率,在实现上用高16位用来记录访问时间(单位为分钟),用低8位⽤用来记录访问频率。Redis在记录访问频率时并不是简单的通过线性增长方式,而是将counter做为一个基于概率的对数增长,8bits即可记录百万级的访问频率。此外,为了更加便于统计还在counter上设计了衰减机制,若在N分钟内Key没有进行访问就将其减N。

4

在经过counter的统计后,需要进一步对热点Key进行获取,在Redis4.0中通过OBJECT FREQ的命令进行获取工作。由于LFU是一个内存逐出策略,为保证热点Key获取的准确度,需要首先将maxmemory-policy设置为allkeys-lfu或者volatile-lfu,此外可以通过使用redis-cli的-hotkeys选项,分析哪些是热点key。

何为MEMORY命令?

在过去可以通过info memory命令获取Redis的内存使用情况,但是获取的信息具有局限性,不能全面掌握内存使用情况。4.0之后的MEMORY命令可以更好的了解Redis的运行情况,并通过对其输出数据的分析及早的发现Redis使用等方面存在的问题。

1.MEMORY USAGE命令

5

MEMORY USAGE命令是对一个Key内存使用情况的一个较精确评估,主要采用抽样的方式进行,随着采样值的增加,最终获取的结果也相对精确,但是所用时间也随之增加。

6

2.MEMORY STATS
MEMORY STATS输出含有多种形式,其中包括Redis的历史峰值、当前分配内存、启动后所用内存(Redis并不是一个预分配的架构,在内存使用方面其用多少内存就会进行多少内存的分配,为了在运行中节省内存,往往在启动时进行共享对象的分配)、主从同步、aof持久化以及db元信息的内存消耗。

7

3.MEMORY DOCTOR
在Redis使用过程中当内存碎片率高于1.4时就会显示出“Highfragmentation:....”的字段来提示使用者;当slave缓冲区的积压超过10M时,同样也会显示出“Big slave buffers:....”的字段;此外当normal客户端缓冲区积压超过200KB时,系统会显示出“Big client buffers:....”的提醒。在实际使用中当出现上述提醒时,往往需要使用者进行分析原因并及早的进行解决,以便于系统的稳定与运行的正常。在分析过程中要充分考虑是网络较差的原因导致传输较慢还是错误使用某一指令或者操作造成的积压。

4.0 在PSYNC2上与传统有何区别?

PSYNC2是4.0的一种全新的主从复制方式。在2.8版本时master与slave首先需要进行全量同步,在此基础上进行增量同步,如果在增量同步过程中出现断线的情况,只要能在master中找到偏移量还可以进行半同步的方式来避免全量同步的消耗。

8

在2.8版本中假若master后有两个slave分别为slave1和slave2,master主要包括server.run_id: master和server.master_repl_offset: master_offset两种字段。同样slave也存在相应的字段,其中slave1中的run_id是slave1的,而slave2中的run_id是slave2的,此外slave1和slave2的master->replrunid也不相同,slave1的是来自于master ,而slave2的来自与slave1。在构建复制链或者复制网时,假若中间slave1出现问题,需将slave2与master相连,由于slave2的replrunid(其为slave1的run_id)与master并不相同,所以不能进行相应的半同步。

9

4.0的PSYNC2解决了上述问题。

  1. 在建立主从复制关系时,master会将自己的replid传递给slave,slave会把自己的replid更新为master的,这样逐级传递下去,最终master、slave1、slave2的server.replid全部一样,都是master的replid。
  2. 主从复制建立完成之后,这条复制链上所有的数据都由master产生,也就是说master、slave1、slave2的offset也全都匹配得上。

通过前面2项可以看出,当有需要改变复制关系把slave2挂载到master上时,master和slave2具有相同的replid,并且offset也可以匹配得上,此时就可以直接进行增量同步,避免了全量同步的开销。此外在进行failover时或者主备切换时,PSYNC2也可以避免进行全量同步。

4.0目前已经更新改进到了4.0.6版本,与传统的Redis相比,Redis4.0在诸多方面都具有明显优势,无论是计算速度还是进行删除操作时的计算量亦或者进行大数据树状复制结构构建时的可靠性方面都有了明显的提升。Redis4.0在今后的使用过程中会应用到越来越多的领域,也会给使用者带去更多的使用体验。

本文由云栖志愿小组林一木整理,百见编辑。

目录
相关文章
|
安全 调度 虚拟化
阿里云郑晓:浅谈GPU虚拟化技术(第三章)
本系列文章推送门: 阿里云郑晓:浅谈GPU虚拟化技术(第一章) GPU虚拟化发展史 阿里云郑晓:浅谈GPU虚拟化技术(第二章)GPU虚拟化方案之——GPU直通模式  今天一个小伙伴@我说:“你浅谈一下,没点技术背景的,估计都看不懂…”,醍醐灌顶啊,面向公众的文章不是学术论文,应以普及基本概念为主。
20956 1
|
8月前
|
人工智能 开发框架 Java
Java 做人工智能:核心非替换,存量系统 AI 化重塑
AI热潮下,Java企业无需推倒重来。本文聚焦Java智能化转型三大重点:工程化衔接AI能力、嵌入式改造存量系统、低门槛落地赋能团队,并以JBoltAI框架为例,倡导“以服务重塑系统”,实现低成本、高稳定、快见效的AI升级。(239字)
375 6
|
运维 自然语言处理 Cloud Native
云栖实录 | 智能运维年度重磅发布及大模型实践解读
阿里云大数据运维团队重磅发布云原生大规模集群场景的 GitOps 方案,该方案基于 OAM 云原生模型,促进研发与运维人员协作,同时兼顾变更的过程管理和终态管理,可实现变更的自动化、代码化、透明化。此外,阿里云大数据运维团队分享了大模型在大数据智能运维场景的应用实践,通过引入检索增强生成(RAG)方法和其他优化策略,大幅提高了在智能问答和智能诊断方面知识的关联性和检索精度,并基于多智能体框架建立高效的数据分析和决策支持系统。
|
9月前
|
JSON 自然语言处理 Docker
安装ES、Kibana、IK
本文介绍如何通过Docker部署单节点Elasticsearch与Kibana,并配置IK分词器。包括创建网络、加载镜像、运行容器、安装IK插件、扩展词典与停用词配置等步骤,助力搭建中文分词环境,提升搜索准确性。
|
数据采集 编解码 人工智能
Gemma 3n正式版开源:谷歌全新端侧多模态大模型,2GB 内存就能跑,重点提升编码和推理能力!
6月底,Google正式开源发布了全新端侧多模态大模型 Gemma 3n!相较此前的预览版,最新的 Gemma 3n 完整版进一步提升性能表现,支持在 2GB 内存的硬件上本地运行,重点提升了编码和推理方面的能力。
1489 1
|
机器学习/深度学习 存储 并行计算
大模型推理显存优化系列(3):FlowMLA——面向高吞吐的DP MLA零冗余显存优化
本文将介绍蚂蚁集团ASystem团队在推理显存优化上的新工作FlowMLA
|
Ubuntu 安全 网络安全
在Ubuntu系统下使用vsftpd配置FTP服务器的步骤
以上就是在Ubuntu系统下使用vsftpd配置FTP服务器的步骤。这些步骤都是基础的,但足够让你建立一个简单的FTP服务器。如果你需要更高级的功能,例如SSL加密、虚拟用户等,你可能需要进一步研究vsftpd的配置选项。
974 13
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
106421 10
|
负载均衡 网络协议 应用服务中间件
高可用 - 04 Keepalived编译安装
高可用 - 04 Keepalived编译安装
896 0
高可用 - 04 Keepalived编译安装
|
数据采集 消息中间件 分布式计算
系统架构+技术选型+用例说明|学习笔记
快速学习系统架构+技术选型+用例说明
系统架构+技术选型+用例说明|学习笔记