- 博客(17)
- 收藏
- 关注
原创 分布式id生成策略
这种方式是基于redis自身提供的原子操作来实现的,这种方式也比较简单,效率也很快。随着业务的增长,数据会越来多,单张表在超过了800万条数据时,mysql的b+树就会增加一层节点。为了提升查询效率,往往我们采用分库分表,也就是一张表的数据,我们分别。这样可以提高查询效率,但也会出现其他问题,主键的生成就是一个问题,以前一张。这种方式是基于数据库来实现的,在数据库中创建一张表,只用到自增主键,每次插入时,去数据库。在使用时,可以做双缓存使用,就是取出最大的序列号,通过步长生成缓存数量的分布式id,
2023-05-15 16:08:05 102
原创 mysql之索引
我们知道提高mysql查询效率的常用方式就是加索引。但是,索引能随便加吗。显然不能。索引也是占用我们磁盘空间的,索引也需要数据库进行维护,在做增删改的时候索引会被数据库做一些相应的操作。所以,我们加索引要在经常查询,而增删改变动不频繁的字段上面,字段的值如果很少的话也是不需要建立索引的,比如性别这样只有男和女的字段查询中与其他表关联的字段外键关系建立索引。这样才会降低数据库维护,增加查询效率。那么索引究竟是什么呢?索引就像我们书中的目录一样。只不过这个目录比较特殊。我们先看一下B+树。mysql中有页的
2023-05-11 19:20:38 148 2
原创 mysql之锁及mvcc机制
在事务开启后,执行任何查询sql就会生成read view,可重复读时不会变,读已提交每次查询会生成新的read view。read view记录了查询时最小未提交的事务id和最大事务id。通过可见性算法,使用事务id在read view查找是否符合数据,不符合通过回滚指针往上找,直到符合。一行数据被多个事务修改时,会保存修改前的数据,产生一条修改后的数据,每条数据都会有事务id和回滚指针,数据通过回滚指针连接起来,形成一个版本链。mysql在读已提交和可重复的的隔离级别下,是由mvcc来完成的。
2023-05-11 19:18:49 93
原创 mysql之事务
事务是一组操作要么成功要么失败,为了保证数据的一致性。事务有四个特点:1.原子性:同一事务内的操作要么同时成功,要么同时失败。是由undolog来实现的2.一致性:这是我们使用事务的最终目的3.隔离性:在事务并发操作时,他们互不干扰。是由锁和mvcc机制实现4.持久性:一旦事务提交了,他的数据就是永久性的。是由redolog实现的。
2023-05-11 19:18:23 50
原创 mysql之运行流程
2.先到buffer pool缓存池中去查,查不到呢,就去idb文件中查询数据所在的页数据,将一整页的数据加载到缓存池中,可以理解为是预读的原理。如果修改操做,将旧值写入undo日志中,用于回滚,更新缓存池中的数据,写redo日志,在哪页做了什么修改。意外宕机恢复缓存池中未写入磁盘的数据用的,这里是顺序写,可以提高性能。在系统空闲的时候,以页为单位,将缓存池中的数据写入磁盘。1.一条sql由客户端发出,到达连接器,判断是否登录,是否有权限查询等,在到分析器进行词法和语法分析,生成语法树。
2023-05-11 19:18:22 191
原创 springBoot启动流程
springboot在启动的时候会先去调用WebApplicationType.deduceFromClasspath();推断项目类型,假如是一个web项目的话会给属性webApplicationType赋值SERVLET,然后在去创建context = createApplicationContext();时根据对应的webApplicationType值创建对应的context。此时context对应的类为AnnotationConfigServletWebServerApplicationConte
2020-07-10 15:09:23 546
原创 一篇文章明白springMVC运行流程
springMVCDispatcherServlet可以在spring启动的时候加载也可以用懒加载spring可以推断controller类型方法 或者bean
2020-07-02 10:56:39 202
原创 redis之哨兵模式
上篇文章我们说到主从复制中主机宕机,要手动设置一台从机。那么哨兵模式就是解决这个问题,让系统去设置主机,并且应用程序不必修改代码,自动连接新的主机。
2020-05-20 17:50:41 175
原创 redis主从复制
我们知道redis是一个key-value存储系统,他的存储和读取都是直接操作内存,所以会非常的快,给用户更好的体验。但是当我们的用户很多时,就意味着同一时间会有大量用户访问我们reids。这样我们的redis就会有压力。为了分担压力,我们会使用主从复制的模式。就像mysql的主从复制一样。首先,我们有有一台主服务器来作为只接受增删改的操作(当然也可以进行查询,既然是为了分担压力,就不建议在主服务器中存在查询操作),然后会有两台或两台以上从服务器,我们的查询操作都要去从服务器操作。这样就会比我们只有一台服
2020-05-20 16:11:16 158
原创 redis持久化之AOF
前面我们介绍了RDB的工作原理,现在我们来介绍一下AOF的持久化AOF是以日志的方式追加我们执行的命令和数据,只有增删改并且命令执行正确才会记录Redis 目前支持三种 AOF 保存模式,它们分别是:AOF_FSYNC_NO :不保存。AOF_FSYNC_EVERYSEC :每一秒钟保存一次。AOF_FSYNC_ALWAYS :每执行一个命令保存一次。我们一般使用每秒触发一次AOF有一个很重要的机制叫做重写就是当我们aof文件大小达到一定量的时候(AOF重写默认大小64m太小 可改5g以上
2020-05-19 16:00:17 246
原创 redis持久化之RDB
redis是一个非常好的缓存中间件,就是将我们的数据放到缓存中。我们知道缓存的读取是非常快的。但是谁都避免不了服务器的意外宕机。一旦宕机,缓存中的数据就会丢失。redis除了有主备方式来解决宕机之后的数据丢失之外,还有持久化机制。把数据写在硬盘上,机器宕机之后启动时会先去硬盘上读取数据写进内存。redis的持久化机制分为两种,即RDB和AOFRDB执行流程:Redis会fork一个子进程,然后子进程将数据写入一个临时的RDB文件,当子进程完成对临时的RDB文件的写入,将完成的RDB文件来覆盖 旧的RD
2020-05-19 15:56:31 179
原创 spring的循环依赖(2)循环依赖的解决(简单面试篇)
前面说了spring在创建的时候应该会出现循环依赖的问题。然而我们的代码中确没有报错,正常执行了。那么spring是怎么解决的呢?首先spring用了缓存的方式解决的循环依赖问题。小伙伴们有没有想到用这种方式呀?...
2020-04-09 11:04:45 491
原创 spring的循环依赖(4)循环依赖的解决(源码级二)
上篇文章说到我们spring在创建bean的过程中经过一系列的调用,会执行到getBean方法去创建bean。而在创建bean的过程中我们又会对bean中依赖的其他bean进行注入。在注入的过程中发现需要注入的bean在我们的容器中没有,也就是说还没有被创建出来。这时候就会又调用getBean去创建我们需要注入的bean。现在我们假设有A类和B类,他们相互进行了依赖。那么我们上一篇的分析就创建A类...
2020-04-02 16:05:04 261
原创 spring的循环依赖(3)循环依赖的解决(源码级一)
最近由于项目比较忙,一时脱不开身总结学习的spring。加上疫情又耽误了一些时间,本次更新就延后了很多。相信爱学习的小伙伴们都在其他博客上找到了spring是怎么解决循环依赖的问题了吧。作者近期也总结了一下,还是希望小伙伴们帮作者看看有木有什么漏洞不到位的地方,欢迎吐槽。上篇文章我们详细介绍了循环依赖的场景,那么spring是怎么解决的呢?让我们一步一步的解开他神秘的面纱吧。我们就从getBe...
2020-04-02 14:03:23 870
原创 spring的循环依赖(1)什么是循环依赖
什么是循环依赖最近学习了一下spring的循环依赖问题,这里总结一下。首先,我们应该知道什么是spring的依赖问题,想要明白这个问题,我们就要先明白spring的创建bean的过程。这里我简单说一下,spring在启动的时候会先初始化我们的项目环境,然后去扫面我们配置的包下面的所有的类,进行解析和注册到beanDecfinition中。然后在根据beanDecfinition的信息对类进行实例...
2019-11-29 15:20:49 1548
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人