Redis面试题总结
Redis面试题总结4:数据存储
#### Redis 的数据过期策略是什么? 1. 定时删除:在设置键的过期时间的同时,创建一个定时器timer、让定时器在键的过期时间来临时,立即执行对键的删除操作。 1. 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。 1. 定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。 #### Redis 有哪些内存淘汰机制 Redis 作为一个内存数据库,在内存空间不足的时候,为了保证命中率,就会和我们操作系统中的页面置换算法类似,选择一定的数据淘汰策略。 - volatile(设置过期时间的数据集) 1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。 2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。 3)volatile-random:从已设置过期时间的数据集中任意选择数据淘汰。 4)volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰。 - allkeys(所有数据集) 5)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰 6)allkeys-lfu:从数据集中挑选使用频率最低的数据淘汰。 7)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰 - no-enviction 8)no-enviction(驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用 no-enviction 策略可以保证数据不被丢失。 PS:在 redis.config 文件中,我们可以设置 maxmemory 的值来配置 Redis 的最大占用内存字节数。 #### Redis 有哪些持久化机制 ##### RDB - RDB 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式。也就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为 dump.rdb。 - RDB 支持 同步(save 命令)、后台异步(bgsave)以及自动配置三种方式触发。 - 优点 RDB 文件紧凑,全量备份,非常适合用于进行备份和灾难恢复 生成 RDB 文件时支持异步处理,主进程不需要进行任何磁盘IO操作 RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快 - 缺点 RDB 快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。且在快照持久化期间修改的数据不会被保存,可能丢失数据 ##### AOF - 全量备份总是耗时的,有时候我们提供一种更加高效的方式 AOF,其工作机制更加简单:会将每一个收到的写命令追加到文件中 - 随着时间推移,AOF 持久化文件也会变的越来越大。为了解决此问题,Redis 提供了 bgrewriteaof 命令,作用是 fork 出一条新进程将内存中的数据以命令的方式保存到临时文件中,完成对AOF 文件的重写。 - AOF 也有三种触发方式:1)每修改同步 always 2)每秒同步 everysec 3)不同no:从不同步。 - 优点 AOF 可以更好的保护数据不丢失,一般 AOF 隔 1 秒通过一个后台线程执行一次 fsync 操作 AOF 日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损 AOF 日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写 AOF 日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复 - 缺点 对于同一份数据来说,AOF 日志文件通常比 RDB 数据快照文件更大 AOF开启后,支持的写 QPS 会比RDB支持的写 QPS 低,因为 AOF 一般会配置成每秒 fsync 一次日志文件,当然,每秒一次 fsync,性能也还是很高的 #### Redis持久化策略选择 1. 如果Redis中的数据完全丢弃也没有关系(如Redis完全用作DB层数据的cache),那么无论是单机,还是主从架构,都可以不进行任何持久化。 1. 在单机环境下(对于个人开发者,这种情况可能比较常见),如果可以接受十几分钟或更多的数据丢失,选择RDB对Redis的性能更加有利;如果只能接受秒级别的数据丢失,应该选择AOF。 1. 但在多数情况下,我们都会配置主从环境,slave的存在既可以实现数据的热备,也可以进行读写分离分担Redis读请求,以及在master宕掉后继续提供服务。
顶部
收展
底部
[TOC]
目录
Redis面试题总结1:常见考点
Redis面试题总结2:多线程
Redis面试题总结3:数据结构
Redis面试题总结4:数据存储
Redis面试题总结5:集群
相关推荐
Redis教程
Redis命令
Redis进阶
PHP 操作Redis