文章目录
最近呢,我有用到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模式运行更为稳定.但是恢复数据的时间较长,需要定期清理维护持久化文件.