美文网首页
缓存架构实战-03-持久化

缓存架构实战-03-持久化

作者: 西海岸虎皮猫大人 | 来源:发表于2020-08-28 19:12 被阅读0次
两种持久化机制

如果没有数据备份,redis重启后,大量请求会落到数据库上
rdb和aof两种持久化机制
rdb, 某个时刻redis数据的全量快照
aof,每隔1秒,调用一次操作系统fsync操作,强制将os cache数据刷入磁盘
内存大小一定,到一定时候,使用lru缓存淘汰算法,自动将一部分数据删除
aof文件会越来越大,大道一定时候,aof做rewrite操作,基于当时数据,重新构造一个小的文件
同时使用两种机制,会优先使用aof

两种机制优劣势对比

rdb适合做冷备,可以通过shell脚本定时将rdb备份到云服务
rdb可以保证redis性能
aof也可做冷备(不太合适),每隔一定时间copy文件
rdb方式冷备,由redis方式控制时间间隔,在最坏的情况下恢复比aof快,aof方式恢复需要回访每一条指令
rdb缺点,丢数据较多,不适合做第一优先恢复方案
一般不要让rdb时间间隔太长
aof方式,写入性能高,文件不易破碎,即使尾部破碎,也容易恢复
aof日志文件是人类可读的
aof日志文件占用空间较大,影响qps
建议综合使用

持久化配置
# /etc/redis/6379.conf
# 每隔60s,如果有10000个key发生了变更,则生成一个rdb文件
# save可以设置多个
# save 60 10000

# redis-cli是安全退出,redis会自动生成rdb快照,数据不丢失
# 使用kill方式杀进程,删除/var/run/redis_6379.pid文件,重启redis,则key丢失
# 测试
# 修改 /etc/redis/6379.conf
# 每5秒如果有1个key发生变更,则生成快照
save 5 1
# 设置key,等待5秒,kill,重启redis可以看到数据未丢失

# aof配置
--------------------
# 默认为no,生成环境打开
appendonly yes
# 每写入1条数据,立即刷到磁盘,性能差
# redis单机qps万级
# appendfsync always
# 每秒,常用
appendfsync everysec
# 仅写入oscache,不可控
# appendfsync no
-----------------

# 文件位置 /var/redis/6379
# 重启redis,设置key,kill,重启redis,可以看到数据未丢失

# rewrite配置
# 增量大于上次rewrite之后文件大小比例则rewrite
# auto-aof-rewrite-percentage 100
# 当前aof大于64mb则rewrite
# auto-aof-rewrite-min-size 64mb

# 修复aof文件
redis-check-aof --fix /var/redis/6379/appendonly.aof

# rdb和aof冲突
# rdb生成快照时,aof rewrite会等待rdb生成之后再执行

企业级备份容灾演练

1.crontab定时调度脚本做数据备份;
2.每小时copy一份rdb的备份到一个目录中,仅保留最近48小时的备份;
3.每天都保留一份当日的rdb备份到一个目录中,仅保留最近一个月的备份;
4.每次copy备份的时候,都把太旧的备份删除;
5.每天晚上将当日服务器上所有的数据备份,发送一份到远程云服务中;

# 每小时备份脚本 redis_rdb_copy_hourly.sh
----------
#!/bin/sh 

cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -48hour +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$del_date
----------
# 定时任务
crontab -e
0 0 * * * sh 0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh

# 每天备份脚本
redis_rdb_copy_daily.sh
-------------
#!/bin/sh 

cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date

del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date
-------------
crontab -e

0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
# 由于数据恢复优先使用aof,故停止redis->关闭aof->copy rdb备份->重启redis->命令行开启aof
redis-cli
config set appendonly yes
# 然后关闭redis,修改配置文件,重启

相关文章

  • 缓存架构实战-03-持久化

    两种持久化机制 如果没有数据备份,redis重启后,大量请求会落到数据库上rdb和aof两种持久化机制rdb, 某...

  • webpack 持久化缓存

    前言 什么是持久化缓存,为什么做持久化缓存? webpack 如何做持久化缓存? 持久化缓存 首先我们需要去解释一...

  • 分布式-缓存

    缓存 Memcached 不可持久化Redis 可持久化 Memcached Memcached数据访问模型添加新...

  • hiberante3-day2

    一、hibernate持久化对象状态(一级缓存)持久化对象 Persistent Object = POJO +...

  • 一致性哈希算法(Consistent Hashing)

    一致性哈希算法(Consistent Hashing ) 一、问题 分布式架构中,无论是数据缓存还是持久化存储,都...

  • 数据持久化

    数据持久化及数据更新缓存 常用的8种缓存机制:HTTP缓存, locationStorage, Session S...

  • Hibernate学习(二)

    目录 Hibernate的持久化类介绍Hibernate持久化对象的状态Hibernate的一级缓存Hiberna...

  • RDD持久化

    为什么需要持久化 所谓的持久化,就是将数据进行保存,避免数据丢失。RDD持久化并非将数据落盘保存,而是用作缓存。了...

  • Promise模式在防止缓存雪崩中的应用

    对大多数高并发架构而言,缓存是不可或缺的。在数据持久化层,其核心是保证数据一致性,而吞吐能力往往较弱。而在缓存层,...

  • 2 kafka的特性

    消息持久化和缓存Kafka高度依赖文件系统来存储和缓存消息。一般的人都认为“磁盘是缓慢的”,这使得人们对“持久化结...

网友评论

      本文标题:缓存架构实战-03-持久化

      本文链接:https://www.haomeiwen.com/subject/yyulsktx.html