为什么Redis内存不宜过大

  • 时间:
  • 浏览:1

该场景的最大那先 的问提是主库与从库的同步中断,而此时很原应着从库仍然在接受写入请求,非要一旦中断时间过长同步缓冲区就很原应着被复写。此时从库上一次的同步位置已丢失,在网络恢复后我觉得主库非要处于变化但原应着从库的同步位置丢失了从库可不才能进行重做,也可是我那先 的问提一中的1,2,3,4步。原应着此时主库内存体积过大非要从库重做数率就会比较慢,而发送到从库的读请求就会受到严重影响,一块儿原应着传输的rdb文件的体积过大,主库的网卡在相当长的一段时间内总要受到严重影响。

6 pika

本文作者:杨艳杰 张恒

从前重要那先 的问提在于第四点中的标红位置,续传可不才能理解为从前复杂化的mongodb的oplog,它是从前体积固定的内存空间,让我们歌词 歌词 让我们歌词 歌词 称之为“同步缓冲区”。

2 不存放垃圾到redis中

而根据场景一中的表格,从前20G的redis扩容从前从库可不才能将近20分钟,在你你这人紧急的时刻20分钟业务才能容忍吗?原应着还没扩好就死翘翘了。

不管是DBA还是开发人员,你用redis,你就可不才能关注内存,而且,你我觉得可是我不称职的,这里可不才能分析redis实例中那先 key比较大从而帮助业务快速定位异常key(非预期增长的key,往往是那先 的问提之源)

4 尽量对数据进行压缩

可是我过总要突然冒出流量的突发性增长,通常在找到原应着事先让我们歌词 歌词 让我们歌词 歌词 的应急做法可是我扩容了。

可不才能看到,当数据达到20G的事先,从前从库的恢复时间原应着被拉长到了将近20分钟,原应着有10个从库非要原应着依次恢复则共需200分钟,而原应着此时该从库承担着多量的读取请求你才能忍受非要长的恢复时间吗?

5 关注内存增长并定位大容量key

当然,让我们歌词 歌词 让我们歌词 歌词 可不才能批量恢复从库,这类于两两一组,非要完全从库的恢复时间也仅仅从200分钟降低到了200分钟,这总要 五十步笑百步吗?

这类于从前redis承载了六个业务的数据,一段时间后有从前业务下线了,那你就把这从前业务的相关数据清理了呗

在主库宕机的事先,让我们歌词 歌词 让我们歌词 歌词 最常见的容灾策略为“切主”。具体为从该集群剩余从库中选出从前从库并将其升级为主库,该从库升级为主库后再将剩余从库挂载至其下成为其从库,最终恢复整个主从集群行态。

这类于你你这人长文本形式的数据,压缩才能大幅度降低内存占用

看到这里你肯定会问:为那先 非要一块儿重做所有从库?这原应着所有从库原应着一块儿向主库请求rdb文件非要主库的网卡则立即跑满从而进入从前无法正常提供服务的状态,此时主库又死了,简直是雪再加霜。

3 及时清理无用数据

4 内存越大,触发持久化的操作阻塞主系统进程的时间越长

这简直可是我废话,而且,有跟让我们歌词 歌词 让我们歌词 歌词 同病相怜的人么?

这原应着redis无法像mysql、mongodb那样基于同步的点位在主库处于变化后从新的主库继续同步数据。 在redis集群中一旦从库换主,redis的做法是将更换主库的从库清空而且从新主库完全同步一份数据再进行续传。

3 网络不好原应着从库重做最终引发雪崩

整个从库重做流程是从前的:

处置法律辦法

原应着我觉得我应该 搞的非要累,那就把业务迁移到新开源的pika上面,从前就我太多 太关注内存了,redis内存太多引发的那先 的问提,那也都总要 那先 的问提了。

但原应着让我们歌词 歌词 让我们歌词 歌词 无法处置1,2,3步的耗时而且该从库会永远的进入恶性循环:不停的向主库请求完全数据,结果对主库的网卡造成严重影响。

对具有时效性的key设置过期时间,通过redis自身的过期key清理策略来降低过期key对于内存的占用,一块儿也才能减少业务的麻烦,非要定期清理了

1 主库宕机

Redis是单系统进程的内存数据库,在redis可不才能执行耗时的操作时,会fork从前新系统进程来做,比如bgsave,bgrewriteaof。 Fork新系统进程时,我觉得可共享的数据内容非要克隆,而且克隆事先系统进程空间的内存页表,你你这人克隆是主系统进程来做的,会阻塞所有的读写操作,而且随着内存使用量越大耗时越长。这类于:内存20G的redis,bgsave克隆内存页表耗时约为7200ms,redis主系统进程也会原应着它阻塞7200ms。

很明显,在你你这人过程中redis的内存体积越大以上每从前步骤的时间总要被拉长,实际测试的数据如下(让我们歌词 歌词 让我们歌词 歌词 自认让我们歌词 歌词 让我们歌词 歌词 的机器性能比较好):

这几年的线上业务表明,redis你你这人内存数据库,它的高性能、稳定性总要 我太多 怀疑的,但让我们歌词 歌词 让我们歌词 歌词 装入去redis的数据太多,内存过大,那原应着出那先 的问提,那它原应着会带给让我们歌词 歌词 让我们歌词 歌词 的可是我灾难性(我能可是我公司都遇到过) 这里列举一下,让我们歌词 歌词 让我们歌词 歌词 遇到的你你这人那先 的问提:

最后祈祷线上20000个redis实例总要 要异常~~~

先来看一下主库宕机容灾过程:如下图

redis主库的写入操作总要在该区域存放一份而且发送给从库,而原应着在上文中1,2,3步耗时太多非要很原应着你你这人同步缓冲区就被重写,此时从库无法找到对应的续传位置它会为社 办 办?答案是重做1,2,3步!

处置法律辦法 当然可是我极力减少内存的使用了,一般状态下,让我们歌词 歌词 让我们歌词 歌词 总要 非要做的:

2 扩容那先 的问提

来源:51CTO

以上是从前完全的容灾过程,而代价最大的过程为从库的重新挂载,而非主库的切换。

1 设置过期时间