最近呢,我使用到redis的缓存这方面的知识,所以去加深了一下学习,故有一些积累的东西,在这里给大家分享一下;顺便也当作笔记一般的存在,以免以后用到的时候,又去再次查找,难道自己记录的知识,它不香吗?
1. Redis持久化策略
1.1什么是持久化
1.1.1持久化介绍
运行环境: redis运行环境在计算机的内存中.如果redis服务器意外宕机,或者机房意外断电等.那么内存中的数据将会全部清空.势必造成业务数据的丢失. 稳定性太差。
而且由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
1.1.2 持久化策略介绍
持久化:可以将内存数据按照指定的规则保存到磁盘中.当redis重启时,根据配置文件中指定的持久化文件.实现数据的恢复.
保存方式:
1.多久保存一次?
1.指定周期保存 2.实时保存
2.保存的是什么?
1.保存key-value结构 2.保存用户的操作记录
- 3.带来的额外的开销? 是否允许?
1.可能会丢失数据. 2.持久化文件太大.不易维护.
2. RDB模式
2.1 RDB模式介绍
1.RDB模式是redis中默认的持久化的策略
2.RDB模式记录的是Redis的内存快照 记录速度更快
3.RDB模式是定期持久化.可能会导致少量的数据丢失.
4.如果用户可以允许少量的数据丢失,则首选RDB模式.因为RDB模式工作的效率最高.
2.2 RDB模式命令
1.save指令 将内存数据马上持久化到硬盘中. 该操作是阻塞的. 持久化操作优先.
2.bgsave指令 后台执行持久化操作. 不能保证立即马上持久化. 当服务器空闲时,会进行持久化操作.(内存不忙) 不会陷入阻塞.
3.RDB模式可以实现自动的持久化.
2.3 RDB模式的持久化策略
在redis的配置文件redis.conf中搜索save--:/save
,我们将看见一下信息
save 900 1 900秒内执行1次set操作.则持久化一次.
save 300 10 300秒内执行10次set操作.则持久化一次.
save 60 10000 60秒内执行10000set操作.则持久化一次.
#save 1 1 1秒内执行1set操作.则持久化一次 性能太低.
如果有特殊的需求,可以修改持久化策略.但是需要注意性能问题。
2.4 RDB模式配置
前面一列是行数,我相信大家都懂啊!
253 dbfilename dump.rdb 可以修改持久化文件的名称
263 dir ./ 持久化文件的位置 ./当前文件目录
3. AOF模式
3.1 AOF模式介绍
1.AOF模式默认条件下是关闭的,需要手动开启.
2.AOF模式可以实现数据的实时持久化.
3.AOF模式,记录的是用户的操作的过程.以追加的形式添加到配置文件之后.
4.AOF模式的持久化是异步操作.不会影响用户的使用.用户使用不会陷入阻塞.
5.由于AOF模式记录的是用户的操作过程,所以持久化文件较大.恢复数据时间较长.
3.2AOF模式配置
开启AOF模式
699 appendonly yes
703 appendfilename "appendonly.aof" 持久化文件名称
3.3AOF和RDB模式同时配置问题
如果RDB模式和AOF模式同时存在,以AOF模式为主. 如果不想开启AOF模式需要将配置关闭.
699 appendonly no
3.4 AOF模式持久化策略
appendfsync always 只要用户执行更新操作,就会持久化到文件中
appendfsync everysec 默认策略 表示每秒同步一次
appendfsync no 不主动持久化.
4. AOF和RDB总结
1.RDB模式持久化是同步的方式,AOF模式异步操作.
2.RDB模式记录的是内存数据的快照(只保留最新数据),
AOF模式记录的是用户的操作过程(持久化文件较大).
3.RDB模式可能会丢失少量数据.AOF模式可以实现实时持久化操作.保证数据"不丢失"
4.RDB模式性能更高.AOF模式运行更为稳定.但是恢复数据的时间较长,需要定期清理维护持久化文件.