redis 持久化、过期策略和淘汰逐出策略

本文介绍了Redis的两种持久化方式——RDB快照和AOF,以及各自的优缺点。RDB在指定时间点保存数据快照,而AOF记录每个写操作以重建数据。此外,还探讨了Redis的过期策略,包括定时、惰性和定期过期,以及淘汰策略,如noeviction、LRU等,详细解析了它们的工作原理和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis 目前支持的持久化方式

RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。
AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。
Redis的持久化是可以禁用的,就是说你可以让数据的生命周期只存在于服务器的运行时间里。
两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据。

RDB快照方式:

  1. SAVE 模式:保存快照的同时,会停止redis服务,直到快照落地,才会重新开始提供服务。
  2. BGSAVE 模式:使用fork的方式拷贝redis内存,fork的同时会导致服务停止,但是间隔比较短,拷贝完内存后,redis重新提供服务,将内存数据落地,因为涉及到内存的拷贝,要求系统拥有和redis占用内存相同大小的空闲内存。

快照缺点:
只能恢复最近一次的快照,有部分数据出现丢失。

aof方式:

每次写入redis前,都会将操作写入内存缓冲区,然后以一定的策略刷至磁盘,恢复redis通过日子回放。

  1. always : Redis在每次有写操作发生时都会同步到硬盘,这种方式会给IO带来很大压力,实际中写入的速率要考虑硬盘的IO速率。
  2. everysec :Redis每1秒将日志同步到硬盘,这种方式性能较好,但也意为着如果Redis崩溃那么将丢失1秒的数据。
  3. no : Redis不主动控制内存缓存区和硬盘的同步,而由操作系统来控制。这种方式不可控,一般不采用。

aof缺点:
随着redis运行,持久化文件的体积会越来越大,redis恢复的时间越长。所以引入BGREWRITEAOF机制,相同key的操作和不断重写,减小文件体积,提高恢复速度。

BGREWRITEAOF 机制:
aof 存放所有key的值,redis会以一定的策略对aof进行压缩和rewrite,rewrite之后aof文件会保存keys的最后的状态,清除掉之前冗余的,来缩小这个文件。

过期策略:

  1. 定时过期:为每个设置过ttl的key都设置定时器,一旦到期立马设置为过期,缺点:cpu占用高
  2. 惰性过期:只有在访问key的时候才会设置过期,缺点:极端情况下内存浪费严重,无法得到有效利用
  3. 定期过期:每隔一段时间,扫描删除部分过期的key

目前redis同时使用2,3两种策略

淘汰策略

  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,不逐出。
  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

ps:淘汰策略和过期策略互不干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值