redis持久化相关笔记

RDB:定时对数据进行快照存储。(相当于数据快照)
AOF:保存写命令到文件。当 Redis 重新启时,程序就可以通过重新执行 AOF 文件中的命令来恢复数据。(相当于操作日志)

单机redis有16个库,默认是0号库

主从复制原理大致是master发送rdb文件给slave

RDB原理redis会fork一个子进程,定时把当前内存中的数据写入磁盘,生成快照。恢复时是将快照文件直接读到内存里
触发机制:1、shutdown,如果没开启aof,则触发;2、执行save或者bgsave;3、执行flushall;4、配置文件配置触发
问题:意外宕机,有部分数据会丢失
优势:1、文件小;2、恢复快;
注意:rdb默认开启,如果开启了aof,可以把rdb配置删掉来提高性能,或者只保留「900 1」,如果同时开启,AOF优先


AOF公司里一般用AOF
原理:redis会开启缓冲区,主进程把命令写入缓冲区,由缓冲区定时任务把数据写入aof文件。记录写操作的日志(增删改),恢复时执行命令
如何开启:appendonly yes
触发机制:appendfsync everysec(默认-每隔一秒,可能会丢一秒数据)、always(实时-数据不会丢但效率太低)
优势:数据安全
问题:1、文件过大,文件撑爆磁盘?「答:默认达到64M,执行AOF重写。给文件瘦身方案,不老老实实记录日志,根据内存数据给原AOF瘦身,例如 incr key1 1,incr key1 2 会合并成set key1 2。但不能默认64M,小公司也要5G以上,大公司100G也有可能,因为重写会fork子进程,影响性能」


4.0之后混合持久化机制(RDB+AOF对AOF重写进行了优化):
原理:fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将重写缓冲区的增量命令以AOF方式写入到文件
AOF分段保存,重写前RDB,重写后AOF,好处是文件大小降低
优势:又快又安全

删除策略:
定时删除:相当于定时器倒计时删除
定期删除:相当于轮询随机抽取删除
惰性删除:数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据 ;发现已过期,删除

redis使用:惰性删除+定期删除

逐出算法(内存满了怎么办):
redis在执行每一个命令前,都会检测内存是否充足(是否大于maxmemory,通常设置为50%以上),如果不足,redis会挑选一些(maxmemory-samples,选待删除的个数)待删除数据,根据逐出策略(maxmemory-policy),选取一部分数据清理掉

maxmemory-policy:
LRU(The Least Recently Used,最近最久未使用算法)
LFU(Least Frequently Used ,最近最少未使用算法)

1)检测易失数据(设置了过期时间key)
    volatile-lru:挑选最近最少使用的数据淘汰(默认)    有过期时间+最近最久未使用
    volatile-lfu:                                有过期时间+最近最少未使用
    volatile-ttl:挑选将要过期的数据淘汰            有过期时间+最快过期
    volatile-random:任意选择数据淘汰                有过期时间+随机


2)检测全库数据(所有key)
    allkeys-lru:挑选最近最少使用的数据淘汰         所有key+最近最久未使用
    allkeys-lfu:                                所有key+最近最少未使用
    allkeys-random:任意选择数据淘汰                所有key+随机


3)放弃数据驱逐 
    no-enviction:放弃逐出,报错

猜你喜欢

转载自blog.csdn.net/weixin_38230961/article/details/108586010
今日推荐