【Redis 的持久化】

内存数据库

Redis是内存数据库,所以当机器停了之后,在内存的数据就会消失。其实这对redis来说没有什么影响,因为它的主要作用就是做缓存,缓存的特点就是这样,开始启动是空的,断电之后还是空的。
缓存预热:基于redis的这种特点,所以会有一些问题,首先就是启动问题,如果系统刚启动就有大量的查询到来,那么这个时候肯定是缓存穿透的,因为缓存没有数据。那么查询就打到了后台DB上,比如MySQL。这时候MySQL可能会宕机,所以为了防止这种情况,一般对于流量初始值比较大的系统的,都会预先把热点数据加载到缓存。这也叫做缓存预热,一个很常见的应用就是在秒杀系统中。
问题排查:如果出现了意外,突然断电,停留在Redis中的数据没来得及写进MySQL,这时就会出现数据丢失。所以基于这个问题,Redis在后续的版本中支持了数据持久化,可以以文件形式把当前Redis数据持久化的磁盘上去。

主要方式

RDB持久化

(1)RDB:redis database。这是redis的一个时间段的快照。(什么叫快照?就是某个时间点的状态),通过一些触发机制,触发redis主动去保存自己的数据,或者自己手动持久化。
在这里插入图片描述
在redis的配置文件中,可以找到这里的参数,之前也解释过,rdb快照只记录redis的写入过程,save x y:在x秒内,发生y次写入就保存一次快照。
实现原理:redis是单线程的,所以为了保存这个redis快照,而又不影响线上服务,redis在保存rdb时,会首先fork一个进程,由这个fork出来的子进程来完成rdb的写入。所以这里的参数的设置需要根据业务的实际情况来,rdb文件的保存频率要合适,过多过少大都不行。
基本操作
在这里插入图片描述
启动redis后,调用save方法,关闭redis-server,再次启动,可以发现数据依然还在。
(2)AOF文件:这个和RDB差不多,实现的原理基本相同,但是这个是Redis数据库的一个比较精细的记录,在conf文件里,也有一些参数:
首先appendonly需要设置为yes:
在这里插入图片描述
这个参数的意思是,aof文件时宜追加的方式写的,追加这种方式显然会让这个文件的size一直变大。
在这里插入图片描述
这个参数是指明多长时间保存一次数据库的写操作,三种选择,第一种没写入一次保存一次,第二种是每秒保存一次,第三种就是不保存。
实际操作:和上次一样,随机写几个值进去,关闭server,再次打开发现值还在

一些问题

(1)aof和rdb文件同时存在是,默认先加载aof文件
(2)如果发现save失败,把conf文件中的dir这个参数写改成当前用户具有新建文件权限的位置。
(3)aof文件最多只会丢失1s的数据,rdb可能会丢失很多数据。但是aof文件一般要比rdb文件大很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值