
获得徽章 0
- #挑战每日一条沸点#
AOF持久化方式有哪些?
在 Redis 的配置文件中存在三种不同的 AOF 持久化方式( fsync策略),它们分别是:
appendfsync always:主线程调用 write 执行写操作后,后台线程( aof_fsync 线程)立即会调用 fsync 函数同步 AOF 文件(刷盘),fsync 完成后线程返回,这样会严重降低 Redis 的性能(write + fsync)。
appendfsync everysec :主线程调用 write 执行写操作后立即返回,由后台线程( aof_fsync 线程)每秒钟调用 fsync 函数(系统调用)同步一次 AOF 文件(write+fsync,fsync间隔为 1 秒)【推荐用这个】
appendfsync no :主线程调用 write 执行写操作后立即返回,让操作系统决定何时进行同步,Linux 下一般为 30 秒一次(write但不fsync,fsync 的时机由操作系统决定)。
从 Redis 7.0.0 开始,Redis 使用了 Multi Part AOF 机制(了解即可)。顾名思义,Multi Part AOF 就是将原来的单个 AOF 文件拆分成多个 AOF 文件。在 Multi Part AOF 中,AOF 文件被分为三种类型,分别为:
BASE:表示基础 AOF 文件,它一般由子进程通过重写产生,该文件最多只有一个。
INCR:表示增量 AOF 文件,它一般会在 AOFRW 开始执行时被创建,该文件可能存在多个。
HISTORY:表示历史 AOF 文件,它由 BASE 和 INCR AOF 变化而来,每次 AOFRW 成功完成时,本次 AOFRW 之前对应的 BASE 和 INCR AOF 都将变为 HISTORY,HISTORY 类型的 AOF 会被 Redis 自动删除。展开评论点赞 - #挑战每日一条沸点#
AOF工作基本流程?
AOF 持久化功能的实现可以简单分为 5 步:
命令追加(append) :所有的写命令会追加到 AOF 缓冲区中。
文件写入(write) :将 AOF 缓冲区的数据写入到 AOF 文件中。这一步需要调用write函数(系统调用),write将数据写入到了系统内核缓冲区之后直接返回了(延迟写)。注意!!!此时并没有同步到磁盘。【仅仅写到缓冲区】
文件同步(fsync) :AOF 缓冲区根据对应的持久化方式( fsync 策略)向硬盘做同步操作。这一步需要调用 fsync 函数(系统调用), fsync 针对单个文件操作,对其进行强制硬盘同步,fsync 将阻塞直到写入磁盘完成后返回,保证了数据持久化。【同步到磁盘】
文件重写(rewrite) :随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。
重启加载(load) :当 Redis 重启时,可以加载 AOF 文件进行数据恢复。展开评论点赞 - #挑战每日一条沸点#
Redis RDB持久化?
什么是RDB持久化?
Redis 可以通过创建快照来获得存储在内存里面的数据在 某个时间点 上的副本。Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis 主从结构,主要用来提高 Redis 性能),还可以将快照留在原地以便重启服务器的时候使用。
RDB 创建快照时会阻塞主线程吗?
Redis 提供了两个命令来生成 RDB 快照文件:
save : 同步保存操作,会阻塞 Redis 主线程;
bgsave : fork 出一个子进程,子进程执行,不会阻塞 Redis 主线程,默认选项。展开评论点赞 - #挑战每日一条沸点#
布隆过滤器适用场景?
适用场景
缓存穿透:当一个非常热门的数据被频繁地查询,但是每次查询都需要从缓存中获取,而缓存中没有相应的数据时,会导致大量的请求落到数据库上,造成数据库压力过大。使用布隆过滤器可以先判断该数据是否存在于缓存中,如果不存在则直接返回,避免了对数据库的无效查询。
爬虫去重:在爬取网页的过程中,经常会出现重复的网页链接。使用布隆过滤器可以快速判断某个链接是否已经被爬过,避免重复采集。
文章推荐:推荐系统可能会根据用户历史浏览记录或者喜好进行推荐,为了避免重复推荐,可以使用布隆过滤器对文章 ID 进行去重。
黑名单过滤:在防火墙、垃圾邮件过滤、反垃圾搜索引擎等方面,布隆过滤器可以用于判断某个 IP 地址、邮箱地址或者关键词是否在黑名单中。
总之,如果需要对大规模数据进行快速查询和去重操作,并且可以容忍一定的误判率,那么布隆过滤器是一个非常合适的数据结构。展开评论点赞