Redis的持久化操作

作者:learner
出处:
1.Redis持久化策略1.1 什么是持久化说明:Redis运行环境在内存中,如果redis服务器关闭,则内存数据将会丢失.
需求: 如何保存内存数据呢?
解决方案: 可以定期将内存数据持久化到磁盘中.
持久化策略规则:
当redis正常运行时,定期的将数据保存到磁盘中,当redis服务器重启时,则根据配置文件中指定的持久化的方式,实现数据的恢复.(读取数据,之后恢复数据.)
1.2 RDB模式1.2.1RDB模式特点说明1).RDB模式是Redis默认的策略.
2).RDB模式能够定期(时间间隔)持久化. 弊端:可能导致数据的丢失.
3).RDB模式记录的是内存数据的快照.持久化效率较高. 快照只保留最新的记录.
1.2.2 RDB模式命令1.save命令: 将内存数据持久化到磁盘中 主动的操作 会造成线程阻塞
2.bgsave命令: 将内存数据采用后台运行的方式,持久化到文件中. 不会造成阻塞.
3.默认的持久化的机制
save 900 1 如果在900秒内,执行了1次更新操作,则持久化一次
save 300 10 如果在300秒内,执行了10次更新操作,则持久化一次
save 60 10000 如果在60秒内,执行了10000次更新操作,则持久化一次
1.2.3 持久化文件配置1).指定持久化文件
Redis的持久化操作文章插图
2).指定持久化文件目录
Redis的持久化操作文章插图
1.3 AOF模式1.3.1 AOF模式特点1).AOF模式默认条件下是关闭的.需要手动开启
2).AOF模式记录的是用户的操作过程,所以可以实现实时持久化操作.
3).AOF模式由于记录的是实时的操作过程,所以持久化文件较大.需要定期维护.
1.3.2 启动AOF模式说明:如果一旦开启AOF模式,则以AOF模式为准.
Redis的持久化操作文章插图
1.4 关于持久化操作总结1.当内存数据允许少量丢失时,采用RDB模式 (快)
2.当内存数据不允许丢失时,采用AOF模式(定期维护持久化文件)
3.一般在工作中采用 RDB+AOF模式共同作用,保证数据的有效性.
1.5 面试题问题: 如果小李(漂亮妹子)在公司服务器中执行了flushAll命令,问怎么办?
答: 需要找到aof文件之后,删除flushAll命令 之后重启redis,执行save命令即可.
2.内存优化策略2.1 为什么需要内存优化说明: 由于redis在内存中保存数据.如果一直存储,则内存数据必然溢出.所以需要定期维护内存数据的大小.
维护策略: 删除旧的不用的数据,保留新的常用的数据
2.2 LRU算法LRU是Least Recently Used的缩写 ,即最近最少使用, 是一种常用的页面置换算法 , 选择最近最久未使用的页面予以淘汰 。 该算法赋予每个页面一个访问字段 , 用来记录一个页面自上次被访问以来所经历的时间 t , 当须淘汰一个页面时 , 选择现有页面中其 t 值最大的 , 即最近最少使用的页面予以淘汰 。
计算维度: 时间T
注意事项: LRU算法是迄今为止内存中最好用的数据置换算法.
2.3 LFU算法LFU(least frequently used (LFU) page-replacement algorithm) 。即最不经常使用页置换算法, 要求在页置换时置换 引用计数 最小的页 , 因为经常使用的页应该有一个较大的引用次数 。 但是有些页在开始时使用次数很多 , 但以后就不再使用 , 这类页将会长时间留在内存中 , 因此可以将引用计数寄存器定时右移一位 , 形成指数衰减的平均使用次数 。
维度: 使用次数
2.4 随机算法随机算法.
2.5 TTL算法根据剩余的存活时间,将马上要超时的数据提前删除.
2.6 配置内存优化策略
Redis的持久化操作文章插图
3.volatile-lfu 在设定了超时时间的数据中,采用lfu算法
4.allkeys-lfu 所有数据采用lfu算法
5.volatile-random 设置超时时间数据的随机算法
6.allkeys-random 所有数据的随机
7.volatile-ttl 将设定了超时时间的数据,提前删除.
8.noeviction 默认规则 如果设定noeviction 则不删除数据,直接报错返回.
手动修改redis内存优化策略:
Redis的持久化操作文章插图
3.关于缓存面试问题问题出发点:
由于 缓存失效 ,导致大量的用户的请求,直接访问数据库服务器.导致负载过高,从而引发整体宕机的风险!!!
3.1 缓存穿透说明: 用户 频繁访问数据库中不存在的数据 ,可能出现缓存穿透的现象.如果该操作是高并发操作,则可能直接威胁数据库服务器.
解决方案:
1.采用IP限流的方式 降低用户访问服务器次数. IP动态代理(1分钟变一次)