本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
#前言
今天图文详解下Redis!
什么是Redis的持久化
我们知道Redis的数据都存储在内存中,如果服务器突然宕机,那么内存数据将会全部消失,为了防止这种情况出现,利用一套机制来保证数据不会因为故障而丢失,我们将这种机制称之为Redis的持久化机制,该机制主要目的是将内存数据存入到硬盘中
Redis 提供两种持久化机制RDB(Redis DataBase)和AOF(Append-Only File)机制。
RDB-快照
快照是最简单的Redis持久化模式,也就是生成某个时间点的数据集,生成RDB文件,可以看到RDB文件中的数据是非常紧凑的,所以在恢复数据的时候读取也是非常快的
触发RDB快照的方式有两种
手动触发
通过手动执行bgsave/save,显示触发生成快照
-
save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用
-
bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短
配置参数自动触发
自动触发有以下几种情况:
- 使用save相关配置,命令save m n。表示m秒内数据集存在n次修改时,自动触发bgsave
- 从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件发送给从节点
- 执行debug reload命令重新加载Redis时,自动触发save命令
- 执行shutdown命令时,如果没有开启AOF持久化功能自动执行bgsave
注意:在RDB持久化的过程中有两个问题需要考虑
- RDB快照过程中Redis是否会停止对外提供服务
- 如果没有停止服务,如何处理新的请求
针对上述问题我们先看一下RDB的持久化执行流程
根据上图我们可以看到主线程主要是fork一个子线程来进行持久化操作,同时父子线程会共享一个数据区域,而且该区域设置为read-only方式,该方式下读的时候没有问题,但是写的时候会触发copyonwrite机制来进行,接下来我们看看什么是 COW(Copy On Write) 机制 。
COW(Copy On Write) 机制
COW(Copy On Write) 机制属于操作系统处理多进程下的一种机制,Redis在持久化的时候会调用glibc函数fork一个子进程。父子进程会共享内存里面的代码段和数据段。
所以持久化的时候是完全交给子进程,而父进程继续处理客户端请求,所以在持久化的时候操作系统采用COW机制进程数据段页面的分离。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面进行数据修改的时候,先将被父子线程共享的这一个页面复制并分离出来,然后直接对复制的页面进程修改,而此时子进程对应的页面是没有修改的。
Redis采用该机制的简单流程如下。Lunix在fork之后,操作系统会将父进程的所有内存也权限设置为read-only,然后子进程的地址空间指向父进程。当父进程只读时没有问题,当有写内存时,CPU硬件检测到内存也是read-only,于是会触发页异常中断(page-fault),陷入到操作系统的一个中断例程。中断例程中,操作系统采用cow机制会触发异常的也复制一份,于是父子进程各自持有独立的一份,如果这个时候又大量写入操作,会产生大量的分页错误(页异常中断page-fault),从而触发cow机制。
之所以称之为快照也就是说在子进程创建的那一时刻开始。内存的数据就固定下来了,不会发生变化。
RDB的优缺点
优点:
- 性能最大化,fork子进程来完成写操作,让主进程继续处理命令,保证了redis的高性能
- 重启恢复数据的时候。数据量比较大时候,Redis直接解析RDB二进制文件,生成对应的数据存储在内存中,比AOF的启动效率更高
缺点
- 数据安全性低,因为是间隔一段时间进行持久化,如果在持久化之间发生了故障,会丢失数据,这也就决定了该方式更适合在数据要求不严谨的时候采用
- 系统性能耗费,根据上文提到的Redis执行cow机制时,可以看到大量的分页错误会耗费不少性能在复制上。
AOF(Append Only File - 仅追加文件)
根据上文,快照在某些情况下不是可行的选择,所以AOF很好的支持了。
AOF 原理
该方式非常简单:也就是修改内存的操作命令都会记录下来,加入AOF日志记录都是Redis实例创建以来的所有修改性指令序列,所以恢复也就是顺序执行所有执行。
Redis使用单线程相应命令,如果每次写AOF文件命令都追加到硬盘,会极大地影响处理性能,所以Redis会先写入到aof缓冲区,根据用户配置的同步硬盘策略写入到aof文件中,这个策略可以通过appendfsync参数配置,
- always:每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响
- no:Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。
- everysec:Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。但是当这一次的fsync调用时长超过1秒时。Redis会采取延迟fsync的策略,再等一秒钟。也就是在两秒后再进行fsync,这一次的fsync就不管会执行多长时间都会进行。这时候由于在fsync时文件描述符会被阻塞,所以当前的写操作就会阻塞。
注意,这也是影响Redis性能的参数之一,建议采用 appendfsync everysec(缺省方式)
AOF重写
所谓重写,Redis在长期运行过程中日志会越来越大,在恢复的时候会非常好使,所以我们的目的就是对日志做瘦身
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新