
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了Redis数据库的一些基础知识等内容,而本文我们就继续来学习一下,Redis性能调优都有哪些常用方法。
以常见的缓存问题为例,通常情况下,Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。Redis缓存异常应对方案分析有针对性的总结了Redis发生缓存穿透、雪崩、击穿情况时,能够有效应对的解决方案,比如不要给访问频繁的热点数据设置过期时间,从而解决Redis实例没有起到缓存层作用的问题。
大key也是影响Redis性能的关键因素,如果一个key写入的value非常大,那么Redis在分配内存时就会比较耗时。同样的,当删除这个key时,释放内存也会比较耗时,这种类型的key我们一般称之为大key。在分布式缓存数据库Redis大KEY问题定位及优化建议中,作者就针对数据库报错OOM来一步步分析大key的问题,先是查看Redis集群内存监控指标,确认内存异常分片,然后通过在线&离线工具分析,结果显示大key导致数据大小分布不均。对此作者给出了两个方案:短期是删除查询到的key,长期是对大key进行拆分。
另一个经常被诟病性能问题的是fork,fork是开源Redis的一个重要依赖,当Redis开启了后台RDB和AOFrewrite后,在执行时,它们都需要主进程创建出一个子进程进行数据的持久化,fork就是创建子进程的系统调用函数。
在华为云GaussDB(forRedis)服务团队支撑某客户业务上云的过程中,就发现了由fork引发的时延抖动问题,文章一场由fork引发的超时,让我们重新探讨了Redis的抖动问题还原了当时的场景,探究了fork对性能的影响,包括业务抖动、内存率利用率降低和实例容量受限。比如,在电商大促、热点事件等业务高峰时发生上述fork,会导致Redis阻塞,进而对业务造成雪崩的影响。
团队通过修改日志、系统性排查整改代码中的fork调用,后在新版本GaussDB(forRedis)中解决了该问题,并清零了内部的fork使用,与原生Redis相比,彻底解决了fork的性能隐患。
其实,考虑到业务场景越来越复杂,原生Redis出现性能瓶颈难以避免。这时候,简单粗暴的解决方法就是使用商业版本的Redis,一劳永逸解决可能存在的性能问题。
在GaussDB(forRedis)与原生Redis集群的性能对比中,就比较了华为云自研Redis和原生Redis集群在X86架构下的性能测试报告,结果表明GaussDB(forRedis)在性能、抗写和存储成本上的优势明显。
从相识到相惜:Redis与计算存储分离四部曲进一步从技术角度拆解分析了GaussDB(forRedis)如何在存算分离的架构下,实现强一致、秒扩容、超可用、低成本。以强一致为例,Redis遇到流量压力进行主从切换时很容易发生数据不同步问题,GaussDB(forRedis)就在存储层(DFV层)去进行强一致的数据同步,而非计算层,这样就避免了任何中间态下的数据的不一致,再也不用担心宕机导致数据丢失。更多的技术细节揭秘,也可以阅读这组专题高斯Redis揭秘系列文章,更全面的认识GaussDB(forRedis)。
Redis的性能问题,涉及到的技术细节很多,本专题只是列出了一些较为的问题,希望读者能够通过上述提及的技术文章,对它有更深入的认识,学会从底层运行机制去思考Redis的性能调优。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。