`
温柔一刀
  • 浏览: 856405 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Redis 常见的性能问题和解决方法

阅读更多

 

1.Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

 

2.Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。

 

3.Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

下面是我的一个实际项目的情况,大概情况是这样的:一个Master,4个Slave,没有Sharding机制,仅是读写分离,Master负责写入操作和AOF日志备份,AOF文件大概5G,Slave负责读操作,当Master调用BGREWRITEAOF时,Master和Slave负载会突然陡增,Master的写入请求基本上都不响应了,持续了大概5分钟,Slave的读请求过也半无法及时响应,Master和Slave的服务器负载图如下:

 

Master Server load:

 

Slave server load: 

 

上面的情况本来不会也不应该发生的,是因为以前Master的这个机器是Slave,在上面有一个shell定时任务在每天的上午10点调用BGREWRITEAOF重写AOF文件,后来由于Master机器down了,就把备份的这个Slave切成Master了,但是这个定时任务忘记删除了,就导致了上面悲剧情况的发生,原因还是找了几天才找到的。

 

no-appendfsync-on-rewrite的配置设为yes可以缓解这个问题,设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入。最好是不开启Master的AOF备份功能。

 

4.Redis主从复制的性能问题,第一次Slave向Master同步的实现是:Slave向Master发出同步请求,Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的命令转发给Slave,初次同步完成。第二次以及以后的同步实现是:Master将变量的快照直接实时依次发送给各个Slave。不管什么原因导致Slave和Master断开重连都会重复以上过程。Redis的主从复制是建立在内存快照的持久化基础上,只要有Slave就一定会有内存快照发生。虽然Redis宣称主从复制无阻塞,但由于磁盘io的限制,如果Master快照文件比较大,那么dump会耗费比较长的时间,这个过程中Master可能无法响应请求,也就是说服务会中断,对于关键服务,这个后果也是很可怕的。

 

以上1.2.3.4根本问题的原因都离不开系统io瓶颈问题,也就是硬盘读写速度不够快,主进程 fsync()/write() 操作被阻塞。

 

5.单点故障问题,由于目前Redis的主从复制还不够成熟,所以存在明显的单点故障问题,这个目前只能自己做方案解决,如:主动复制,Proxy实现Slave对Master的替换等,这个也是Redis作者目前比较优先的任务之一,作者的解决方案思路简单优雅,详情可见 Redis Sentinel design draft http://redis.io/topics/sentinel-spec

 

总结:

1.Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

2.如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

3.为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。

4.尽量避免在压力较大的主库上增加从库

5.为了Master的稳定性,主从复制不要用图状结构,用单向链表结构更稳定,即主从关系为:Master<--Slave1<--Slave2<--Slave3.......,这样的结构也方便解决单点故障问题,实现Slave对Master的替换,也即,如果Master挂了,可以立马启用Slave1做Master,其他不变。

 

今天暂时写这么多吧,以后再补充。

分享到:
评论
2 楼 温柔一刀 2013-06-29  
djlijian 写道
最近也在研究redis,如何在项目中使用呢?感觉网上的资料太少了。。。

网上资料已经很多了,这里是中文资料聚集地:http://blog.nosqlfan.com/html/3537.html
1 楼 djlijian 2013-05-16  
最近也在研究redis,如何在项目中使用呢?感觉网上的资料太少了。。。

相关推荐

    10.1.2 redis常见性能问题和解决方案.md

    10.1.2 redis常见性能问题和解决方案

    10.1.5 Redis 常见的性能问题都有哪些?如何解决?.md

    10.1.5 Redis 常见的性能问题都有哪些?如何解决?

    Redis性能问题排查解决手册.rar

    Redis性能问题排查解决手册.rar

    Java知识点之Redis篇.pdf

    1.2 redis 常见性能问题和解决方案 1.3 MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据 1.4 Memcache 与 Redis 的区别都有哪些? 1.5 Redis 常见的性能问题都有哪些?如何...

    提升node.js中使用redis的性能遇到的问题及解决方法

    本文中提到的node redis client采用的基于node-redis封装的二方包,因此问题排查也基于node-redis这个模块。接下来通过本文给大家分享提升node.js中使用redis的性能

    redis经典面试题详细

    Redis常见性能问题和解决方案? Redis官方为什么不提供Windows版本? 一个字符串类型的值能存储最大容量是多少? Redis如何做大量数据插入? 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头...

    Redis面试题50道(含答案)_.pdf

    1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势?...47、Redis 常见性能问题和解决方案? 48、Redis 提供了哪几种持久化方式? 49、如何选择合适的持久化方式? 50、修改配置不重启 Redis 会实时生效吗?

    Redis缓存设计与性能优化精要

    接着,针对缓存击穿与雪崩问题,提出过期时间随机化和高可用架构设计的解决方案。特别强调热点Key重建优化,避免并发高峰时的性能问题。另外,详细阐述了缓存与数据库双写一致性问题及解决策略。最后,提供了Redis...

    Redis面试专题.pdf

    10.Redis 常见的性能问题和解决方案 11.Redis 的数据淘汰策略有哪些 12.Redis 当中有哪些数据结构 13.假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来? 14...

    Spring Boot + redis解决商品秒杀库存超卖

    在众多抢购活动中,在有限的商品数量的...还有就是抢购时会出现大量用户的访问,如何提高用户体验效果也是一个问题,也就是要解决秒杀系统的性能问题。本文主要介绍基于redis 实现商品秒杀功能。先来跟大家讲下大概思路

    用Go编写的基于代理的高性能Redis集群解决方案Codis.rar

    用Go编写的基于代理的高性能Redis集群解决方案Codis

    redis-5.0.4.tar.gz下载及redis安装过程

    redis-benchmark 性能测试工具 redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复) redis-check-dump 快照文件检测工具,效果类上 redis-cli 客户端 redis-server 服务端 10: 启动与连接 ...

    Redis分布式锁存在的问题及解决方案(值得珍藏)

    Redis分布式锁在实现跨进程、跨机器的互斥访问时,虽功能强大,但也存在一些常见问题。这些问题主要源于网络延迟、系统时钟误差以及Redis自身的特性。 一个典型问题是锁的"死锁"现象,即因进程意外终止或网络故障,...

    分布式存储极致性能Redis6视频.zip

    02_redis官网查阅和基本配置 03_逐渐又加入了多线程特性 04_多线程io多路复用入门简介 05_TK Mapper之一键生成代码 06_srm框架整合理论说明 07_缓存案例-A 08_缓存案例-B 09_类型应用落地-A 10_类型应用落地-B 11_...

    Redis主从复制问题和扩容问题的解决思路

    为了解决Redis主从Copy的问题,有如下两个解决方案: 主动复制所谓主动复制,就是业务层双写多个Redis,避开Redis自带的主从复制。但是自己干同步,就会产生一致性问题,为了保证主从一致,需要加入一系列的验证机制...

    2023年Redis缓存面试题目汇总

    包括以下是常见的一些Redis...在分布式环境下,如何解决Redis的节点一致性问题? Redis的内存管理是如何进行的? 你如何监控Redis的性能? 在Redis中,如何进行大量的写操作? Redis的将来版本可能会增加什么样的功能?

    redis面试题热门20道以及解析

    问题触及了Redis的性能优势、单线程模型、主从复制、集群架构、内存淘汰策略、分布式锁实现、发布/订阅模式等,旨在评估候选人对Redis实际应用和潜在问题的理解和解决能力。掌握这些知识点对于构建高效、可靠的数据...

    Redis企业版Tair性能增强系列产品概述.pdf

    Redis企业版Tair性能增强系列产品概述.pdf

    01-VIP-Redis核心数据结构与核心原理1

    Nginx也是采用IO多路复用原理解决C10K问题# 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000其

Global site tag (gtag.js) - Google Analytics