Redis持久化

root
233
文章
0
评论
2021年3月1日16:36:37 评论 2591字阅读8分38秒

Redis持久化

 

什么是持久化

利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化

 

为什么要进行持久化

防止数据的意外丢失,确保数据安全性

 

持久化过程保存什么

  • 将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
    • RDB(快照)
  • 将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程   
    • OAF(日志)

 

RDB启动方式——save指令

因为redis是单线程,一个一个处理的,save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用

RDB保存的 位置,在你redis.conf文件指定的保存位置

127.0.0.1:6379> save
OK

[root@kafka01 redis]# cat dump.rdb 

 

——save指令相关 配置

port 6380
daemonize yes
logfile "6380.log"
dir /usr/local/redis/data
dbfilename dump-6380.rdb
rdbcompression yes
rdbchecksum yes
  • dbfilename dump.rdb
    • 说明:设置本地数据库文件名,默认值为dump.rdb
    • 经验:通常设置为dump-端口号.rdb
  • dir
    • 说明:设置存储.rdb文件的路径
    • 经验:通常设置成存储空间较大的目录中,目录名称data
  • rdbcompression yes
    • 说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩
    • 经验:通常默认为开启
  • rdbchecksum yes
    • 说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件的过程均进行
    • 经验
  • stop-writes-on-bgsave-error  yes
    • 说明:后台存储过程中如果出现错误现象,是否停止保存操作
    • 通常默认为开启状态
[root@kafka01 redis]#  ./bin/redis-server data/redis-6380.conf
[root@kafka01 redis]# netstat -lntup|grep 6380
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      26945/./bin/redis-s 
tcp6       0      0 :::6380                 :::*                    LISTEN      26945/./bin/redis-s 

 

数据量过大,单线程执行方式造成效率过低如何处理?

后台执行——bgsave指令

bgsave使用过子进程创建rdb文件,不用排队

  • 谁:redis操作者(用户)发起指令;redis服务器控制指令执行
  • 什么时间:即时(发起);合理的时间(执行)
  • 干什么事情:保存数据
[root@kafka01 redis]# redis-cli -p 6380
127.0.0.1:6380> set kk oo
OK
127.0.0.1:6380> get kk
"oo"
127.0.0.1:6380> bgsave
Background saving started

 

RDB优点

  • RDB是一个紧凑压缩的二进制文件,存储效率较高
  • RDB内部存储的是Redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
  • RDB数据恢复的速度要比AOF快很多
  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于容灾备份

 

RDB缺点

  • RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性
  • bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些游戏
  • Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各种版本服务之间数据格式无法兼容现象

 

AOF概念

  • AOF持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程
  • AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

 

AOF写数据三种策略

  • always(每次)数据要求高选这种
    • 每次写入操作均同步到AOF文件中,数据0误差,性能较低
  • everysec(每秒)建议这种
    • 每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高
    • 在系统突然宕机的情况下丢失1秒内的数据
  • no(系统控制)
    • 有操作系统控制没同步到AOF文件的周期,整体控制不可控

AOF功能开启

配置

appendonly yes

作用

  • 是否开启AOF持久化功能,默认为不开启状态

AOF写数据策略

appendfsync everysec

在配置文件中添加

[root@kafka01 data]# vim redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dir /usr/local/redis/data
dbfilename dump-6380.rdb
rdbcompression yes
rdbchecksum yes
appendonly yes
appendfsync everysec

在数据目录里会看到aof存储文件

[root@kafka01 redis]# ./bin/redis-server ./data/redis-6380.conf

[root@kafka01 data]# ll
total 12
-rw-r--r-- 1 root root 2944 Feb 25 19:13 6380.log
-rw-r--r-- 1 root root    0 Feb 25 19:13 appendonly.aof
-rw-r--r-- 1 root root  105 Feb 25 16:39 dump-6380.rdb
-rw-r--r-- 1 root root  165 Feb 25 19:05 redis-6380.conf

 

AOF写数据遇到的问题

如果连续执行如下指令该如何处理,如果按常规的AOF配置,会对下面每一条操作指令进行存储

AOF自动重写方式

  • 自动重写触发条件设置
//定义自动重写AOF的最小尺寸
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percent

  • 自动重写触发比对参数(运行指令info Persistence获取具体信息)
//自动重写触发比对参数(运行指令info Persistence获取具体信息) 
aof_current_size 
//基础尺寸
aof_base_size

 

 

 

继续阅读
历史上的今天
3月
1
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年3月1日16:36:37
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Redis哨兵模式部署 Redis

Redis哨兵模式部署

Redis哨兵模式部署 主机宕机 将宕机的master下线 找一个slave作为master 通知所有的slave连接新的master 启动新的master与slave 全量复制*N+部分复制*N 哨...
Redis6-redis.conf配置文件说明 Redis

Redis6-redis.conf配置文件说明

Redis6-redis.conf配置文件说明 ###NETWORK(网络)###(需记) bind 默认配置项:bind 127.0.0.1 说明:Redis服务监听地址,用于Redis客户端连接,...
Redis 的基本操作 Redis

Redis 的基本操作

Redis 的基本操作 作为缓存使用 原yun始业务功能设计 秒杀 618活动 春节买票 运营平台监控到的突发高频访问数据 突发时政要闻,被强势关注 高频,复杂的统计数据 在线人数   ke...
Redis安装 Redis

Redis安装

Redis安装 Redis的应用 为热点数据加速查询(主要场景),如热点商品,热点新闻,热点资讯,推广类等高访问量信息等 任务队列,如秒杀,抢购,购票排队等 及时信息查询,如各位排行榜,各类网站访问统...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: