8 redis持久化
2020-03-06 18:49
716 查看
8 redis持久化
RDB
把内存中单的数据生成快照保存在磁盘的过程,触发RDB持久化的过程分为手动触发和自动触发
- 手动触发
命令行使用save命令,阻塞当前redis服务器知道RDB完成
命令行使用bgsave命令,使redis进程执行fork操作创建子进程,RDB持久化由子进程负责,完成后自动结束 - 自动触发(默认支持)
redis.conf配置save选项
“save seconds change",表示seconds秒内有change个改动即进行保存 - 优点: RDB是一个紧凑的二进制文件,,适用于备份和全量恢复
- 加载RDB恢复数据远远快于AOF方式
-
bgsave每次运行都要执行fork操作子进程,频繁执行成本高
AOF(append only file)
以独立日志方式记录每次的命令,重启时执行AOF文件中的命令恢复数据
-
优点:
采用append方式,即使主机宕机也不会破坏日志文件中的内容 - 日志过大时,redis启用rewrite机制,即redis以append模式不断的将修改的数据写入到老的磁盘文件中,同时redis创建一个新的文件用于记录有哪些修改命令被执行,因此在rewrite切换时可以更好的保证数据安全性
劣势
-
对于相同的数据集,AOF文件比RDB文件大
配置AOF
-
”appendonly yes”:开启AOF,默认关闭
rewrite功能
因为所有的操作都会记录,必定会出现一些无用的日志,这会让AOF文件过大,也会让数据恢复的时间过长。因此,Redis提供了AOF rewrite功能,可以重写AOF文件,只保留能够把数据恢复到最新状态的最小写操作集。可以在redis.conf配置定期自动进行:
#日志大小增长100%时自动进行AOF rewrite auto-aof-rewrite-percentage 100 # 增长大小没有达到64mb时不会进行rewrite auto-aof-rewrite-min-size 64mb
缓存击穿
指用户请求的Key的数据不在Redis的缓存当中,最终只能去后端的数据库中查找请求的数据。当这种请求特别多是会对后端数据库造成很大的压力
解决方案:
加锁,只有第一个请求查询数据库,然后放入redis,后续的查询,可以设置永不过期或者设置一个较大的过期时间
缓存穿透
指客户端一直查询一定不存在的数据
解决方案:
-
id检验;不存在的数据缓存为null,超时时间设置短一点
缓存雪崩
缓存中的数据同一时间大量失效,导致全部查询落入数据库
解决方案:
-
数据的过期时间随机设置,防止同时过期;热点数据永远不过期
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- redis 的两种持久化方式及原理
- Redis 持久化
- Redis源码剖析和注释(十八)--- Redis AOF持久化机制
- Redis的持久化机制
- Redis(八)----Redis的持久化
- redis学习笔记之持久化
- redis内存优化、持久化以及主从复制
- Redis的持久化方式
- Redis lesson11 Redis 持久化之RDB (Redis Database)
- Redis进阶:数据持久化,安全,在PHP中使用
- redis持久化机制
- Redis作者:深度剖析Redis持久化
- NoSQL之redis(持久化策略)
- redis 数据持久化 详细说明
- Redis(一)持久化:快照和AOF
- Redis(一) 数据结构与底层存储 & 事务 & 持久化 & lua
- 【Redis学习】:redis持久化
- redis持久化方法对比分析
- Redis 持久化的策略
- Redis作者:深度剖析Redis持久化