Day18 Redis架构实战-持久化RDB

Redis持久化

  • Redis是一个in-memory的data store,在记忆体中操作与储存让其可以达到很快的效能,但如果关闭Redis时.记忆体中的资料将会消失.

    • 情境一:当Redis用途在cahce时,资料可能遗失了後再载入即可.

    • 情境二:如果Redis当作资料库就必须要让资料可以永久保存起来,这时候持久化就相当重要,以便在Redsi服务启动时可以把需要的资料完整的载入提供所需.

    • 情境三:有个额外的情境也需要特别关注,虽然cache资料没有了我们可以直接重新把需要的资料透过资料库取得并载入,但是资料量如果有10G甚至更多的时候,且这样在cache中的资料应该是需要常用到的资料,这样Redis服务在启用的时候很快,但要把常用资料都载入需要耗费非常多的时间和资料库的资源,这个情境下也就要考虑是否使用持久化的方式来加快载入减少资源的花费.

  • 持久化有以下几个模式,可以在Redis正常或不正常关闭时,能够继续保有资料.

    • 不需要持久化
    • RDB
    • AOF
    • RDB+AOF

Redis持久化模式->不需要持久化

这个模式适用於资料不是特别重要,也就是允许失去所有资料也没关系,可以选择此模式.

Redis持久化模式->RDB

此模式会在特定间隔时间条件达到时,将Redis在记忆体中的内容保存到RDB档案(二进位格式)中.也就是在特定时间点的快照.当Redis服务启动时,可以读取RDB档案来恢复到记忆体中.

  • 优点:

    • RDB是存放Redis某个时间点的快照,适合用在备份或是异地备份,提供灾难复原使用,且只要备份一个档案即可.
    • RDB进行中对Redis效能的影响很小,因为Redis的父Process会fork一个子Process独立进行产生RDB,父Process不需要进行IO操作.
    • 当Redis重新启动时,如有大量资料的情况下,RDB比AOF有更短的启动时间.
    • 在Replica架构下,Redis重新启动或failover後,RDB支援部分再同步机制.
      (部分再同步指的是可以继续从原来的Master同步异动直到一致,只有RDB才可以适用,AOF模式不可以使用此机制.)
  • 缺点:

    • 因为RDB是某个时间点的快照,不是最新的内容,故有可以会发生资料遗失的状况.
    • 如果资料量极大且产生快照RDB的频率太高时,有可以会因此耗用较多的CPU效能,影响到父Process的客户端操作回应.
  • 快照设定

# 取得目前快照设定
127.0.0.1:6379> config get save
1) "save"
2) "3600 1 300 100 60 10000"

# 取得目前rdb的档案名称
127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

# 取得目前rdb档案存放位置
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/bin"
  • 马上执行RDB
# 马上产生rdb档案(测试使用,实际上会依照设定的间隔条件到达时进行)
127.0.0.1:6379> save
OK

# 马上产生rdb档案(fork子Process於背景执行,如果目前正在进行rdb or aof则会回传错误)
bgsasve

# 取得最近一次save的时间点,当回传的unixtimestamp不再变化时,表示bgsave已经完成
lastsave

# 排程产生rdb档案(如果目前aof正在进行中,则会回传OK,此次RDB则不会执行,会排程安排下次执行)
bgsave schedule
  • 特定间隔执行RDB

可以在redis.conf档案中设定snapshot区段的相关设定.
https://ithelp.ithome.com.tw/upload/images/20211003/20111658jOtCPLPmvJ.png

  • 关闭Redis时产生最後的RDB
# 预设关闭服务时会执行产生RBD
shutdown save

# 关闭服务时不执行产生RDB
shutdown nosave
  • 启动Redis Server时会载入RDB

https://ithelp.ithome.com.tw/upload/images/20211004/20111658mnNW1INbnm.png


<<:  轻松小单元 - 偶尔的急件,大陆厂牌产品禁用

>>:  Day18 NiFi - 与 AWS Athena & AWS Redshift 对接设定

渗透测试进阶篇

今天是渗透测试进阶篇 没意外也会是渗透测试系列最後一篇, 当然也许最後会有几篇混合系列的文章, 还是...

Day.7 深入理解动态连结

为甚麽会出现动态连结? 动态连结出现的原因就是为了解决静态连结中提到的两个问题: 浪费空间,因为每个...

Vue Router介绍

在昨天建置vue-cli插件时我们有新增vuex和vue-router,所以今天要先来介绍vue-r...

DAY4: Visual Code 的第一个Node.js与 Node一开始系统无法执行的解决办法

上一篇介绍了安装步骤与执行环境,接下来今天要撰写人生第一个Node.js。因为接下来要介绍的或是要展...

Day18 用CSS做出动画效果

还没学到这个属性之前,一直以为必须使用到JavaScript,才能让网页有动画的效果,没想到用CS...