Redis面试真题总结(四)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

AOF 持久化?

AOF(Append Only File)持久化是Redis提供的另一种数据持久化方法。

通过AOF持久化,Redis将写操作追加到一个文件中

  • 以保证数据在重启或者异常情况下的持久性。

AOF持久化工作原理:

追加写操作:

  • 当有写操作(增删改)发生时,Redis会将这些写操作以文本的形式追加到AOF文件末尾。

文件同步:

  • Redis会通过fsync()系统调用将AOF文件的内容强制刷写到磁盘上,以保证数据的持久性。
  • 可以通过配置appendfsync参数来调整同步频率
    • 可以选择每次写入都同步(always)、每秒同步一次(everysec)或者操作系统自行决定(no)。

文件重写:

  • 当AOF文件变得过大时,可以通过BGREWRITEAOF命令触发AOF文件的重写。
  • Redis会启动一个子进程,将当前内存中的数据重写到一个新的AOF文件中,并且优化写入操作,减小AOF文件的体积。

恢复数据:

  • 在Redis重启的时候,会通过加载AOF文件中保存的写操作来恢复数据,重建内存中的数据状态。

AOF持久化的优点:

数据可靠性高:

  • AOF持久化记录了写操作的历史记录,因此在异常断电或者重启时
    • 可以通过AOF文件将数据快速恢复,避免了数据丢失的风险。

数据实时性高:

  • 相比于RDB持久化的定期快照记录,AOF持久化会实时追加写操作到AOF文件中
    • 因此对于实时性要求较高的应用场景更为适合。

可读性好:

  • AOF文件以纯文本形式记录写操作,可以直接查看和修改AOF文件,方便进行恢复和数据分析。

AOF持久化的缺点:

文件体积较大:

  • 由于AOF记录了所有的写操作历史,因此AOF文件会比RDB文件大,可能会占据更多的磁盘空间。

写入操作耗时:

  • 由于每次写操作都需要追加到AOF文件中,相比于RDB持久化,AOF持久化会有一定的写入延迟,可能会影响Redis的性能。

文件重写需要时间:

  • 当AOF文件变得过大时,进行AOF文件的重写是一项耗时的操作,可能会对Redis的性能产生一定影响。

Redis默认采用哪个持久化方式?

Redis默认采用的持久化方式是RDB(Redis Database)持久化。

  • 在默认配置下,Redis将周期性地将内存中的数据生成快照并写入磁盘,以保证数据的持久性。

RDB持久化通过将数据以二进制的形式保存到磁盘的RDB文件中,包含了Redis数据的全量快照。

  • 可以通过配置文件中的save参数来设置快照生成的条件
    • 比如在指定的时间间隔内、指定的写操作次数等。

Redis 内存淘汰策略有哪些?

Redis提供了一些策略,以便在届满最大内存限制时进行内存淘汰:

noeviction:

  • 当内存不足以容纳更多数据时,新的写入操作会报错。这是默认策略。

allkeys-lru:

  • 在内存不足时让位于新值内容的,是最近最少使用的键(LRU:Least Recently Used)。

volatile-lru:

  • 在设置了过期时间的键中,淘汰最近最少使用的键,新的写入操作会报错。

allkeys-random:

  • 在内存不足时随机删除某个键的值,为新值让出空间。

volatile-random:

  • 在设置了过期时间的键中,随机淘汰一些键。

volatile-ttl:

  • 在设置了过期时间的键中,有更早过期时间的键优先被淘汰。

如果你的程序可以接受偶发的性能下降,allkeys-lru可能是一个好选择。

如果你知道一些键是可以安全删除的,你可以为它们设置过期时间,然后使用volatile-lru

如果数据的重要性不等,你可以为重要的数据设置过期时间,然后使用volatile-ttl策略。

Redis过期键的删除策略

Redis使用过期键的删除策略来自动清除已经过期的键,以释放内存空间。

Redis采用了多种策略来删除过期键,具体的删除策略由配置参数eviction决定。

常见的策略包括:

定期删除策略(定时删除):

  • Redis会在每个指定的时间间隔(由配置参数hz决定)内,检查一批键是否过期,然后删除过期的键。
  • 这种策略不会频繁地检查每个键是否过期,因此对CPU的消耗较少。

惰性删除策略(懒汉式删除):

  • 当访问某个键时,Redis会先检查该键是否过期,如果过期则立即删除。
  • 这种策略相对更加高效,因为它只会在需要时才进行检查和删除操作。

定期删除与惰性删除的结合:

  • Redis同时使用了定期删除和惰性删除两种策略,在有限的时间间隔内通过定期删除来批量清除过期键
    • 同时在读写操作中使用惰性删除来保证及时的清理。

需要注意的是,无论采用哪种删除策略,Redis并不是立即清除过期键

  • 而是通过在查询和写入操作时进行过期键的检查和删除。

因此,在过期时间到达之后,过期键可能仍然存在一段时间,直到Redis执行删除操作。

  • 如果需要确保即时删除过期键,可以使用DEL命令主动删除过期键。

同时,可以通过配置参数maxmemory来限制Redis使用的内存大小

  • 当达到内存限制时,Redis会根据所采用的删除策略来淘汰一些数据以释放内存空间。
相关推荐
好看资源平台3 分钟前
Spring 全家桶使用教程 —— 后端开发从入门到精通
java·数据库·spring
Y_3_725 分钟前
Redis 中 String 字符串类型详解
linux·数据库·redis·缓存·bootstrap
gorgor在码农1 小时前
Mysql 架构
数据库·mysql·架构
@月落1 小时前
获取douyin商品详情:API接口的力量
java·前端·数据库
program-learner1 小时前
日志系统扩展一:日志落地数据库:MySQL、SQLite3
数据库·mysql·sqlite·项目·日志系统
dbln2 小时前
MySQL之基本查询(一)(insert || select)
数据库·mysql
这孩子叫逆2 小时前
Springboot使用redis,以及解决redis缓存穿透,击穿,雪崩等问题
spring boot·redis·缓存
java—大象2 小时前
基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
java·数据库·spring boot·python·课程设计
程序猿进阶2 小时前
定时任务上云改造方案
java·服务器·网络·数据库·性能优化·定时任务·上云
张某布响丸辣3 小时前
SQL关键字的优先级执行顺序:深入理解SQL查询的构造
java·sql·mysql·面试