回答
Redis 持久化有两种:RDB
和 AOF
。
RDB
:是将 Redis 在某个时间点的数据快照写入磁盘。
AOF
:是将 Redis 执行的每个命令追加到文件中。
大 key 就意味着 value 数据比计较大,则他会对 Redis 持久化产生如下几个影响。
一、内存和 CPU 使用增加
在执行 RDB 生成快照文件时和 AOF 重写时,Redis 需要处理 Redis 内存中的所有数据,如果存在大 key,那么在这个处理过程中会消耗更多的内存和 CPU 资源。
同时,AOF 文件中包含了 Redis 执行的每一条命令,如果大 key 变更频繁,会导致 AOF 文件迅速增大,严重影响存储效率。尤其是在处理 AOF 重写机制时,如果有大 key 需要重写,那么将对 CPU 和磁盘I/O产生较大的压力。
二、增加 fork() 操作的成本
在生产 RDB 快照文件(bgsave
)和 AOF 重写过程中,Redis 需要执行 fork()
操作来生成子进程,如果有大 key ,则会增加 Redis 内存使用,从而fork()
操作耗费更多时间。
同时,由于 Linux 的写时复制(Copy-On-Write,COW)机制,父子进程在 fork()
后会共享同一份物理内存,如果在持久化过程中修改了大 Key,那么这些修改需要额外的内存来存储新的数据副本,则进一步增加了内存压力。