求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

MySQL 系列 bin 日志

MySQL 技术内幕:InnoDB存储引擎

Binlog 适用于主从复制和数据恢复 MySQL归档日志(binlog)是二进制日志,主要记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE …)的所有操作。二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记...

MySQL 系列 外键

MySQL 技术内幕:InnoDB存储引擎

外键 主要用于引用完整性的约束检查。在 InnoDB 存储引擎中,对于一个外键列,如果没有显示地对这个列加索引,InnoDB 存储引擎会自动对其加一个索引,这样能够避免表锁. 外键和锁 对于外键值的插入或更新,首先需要查询父表中的记录,即 select 父表。但是对于父表的 select 操作,不是使用一致性非锁定读的方式,因为这样会发生数据不一致的问题,所以使用的是 select .....

网络 系列 DNS

开启 网络 探索新篇章


MySQL 系列 幻读

MySQL 技术内幕:InnoDB存储引擎

MySQL 的 RR 隔离级别通过 MVCC + Next-key Locks 解决幻读问题 幻读 在一次事务中,多次查询之后,结果集的个数不一致的情况叫做幻读。而多出来或者少的哪一行被叫做幻行 在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性 解决方法 在快照读读情况下, MySQL 通过 MVCC 来避免幻读。 在当前读读情况下, MySQL...

并发编程 系列 CopeOnWriteArrayList

开启并发编程探索新篇章

执行 await 方法的线程阻塞,直到 countDown 方法执行 N 次使得计数器为 1 时执行。   CountDownLatch 主要有两个方法: countDown() 和 await()。countDown() 方法用于使计数器减一,其一般是执行任务的线程调用,await()方法则使调用该方法的线程处于等待状态,其一般是主线程调用。

并发编程 系列 CopeOnWriteArrayList

开启并发编程探索新篇章

Doug Lea 大师 提供 CopyOnWriteArrayList 容器可以保证线程安全,保证读读之间在任何时候都不会被阻塞。 如果简单的使用读写锁的话,在写锁被获取之后,读写线程被阻塞,只有当写锁被释放后读线程才有机会获取到锁从而读到最新的数据,站在读线程的角度来看,即读线程任何时候都是获取到最新的数据,满足数据实时性。既然说到要进行优化,必然有 trade-off,就可以牺...

并发编程 系列 Current

开启并发编程探索新篇章

ArrayList 不是线程安全的,在读线程读取 ArrayList 的时候如果有写线程写数据,基于 fast-fail 机制,会抛出 ConcurrentModificationException 异常,也就是说 ArrayList 并不是一个线程安全的容器,当然可以用 Vector,或者使用 Collections 的静态方法将 ArrayList 包装成一个线程安全的类,但是这些...

并发编程 系列 阻塞队列

开启 并发编程 新篇章

在 Concurrent 包中, BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括它们各自的功能以及常见使用场景。 概念 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示: ...

并发编程 系列 锁

开启 并发编程 新篇章

Java 提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java 中往往是按照是否含有某一特性来定义锁,通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 乐观锁和悲...

并发编程 系列 线程池

开启 并发编程 新篇章

先看一下线程池的类图: Executor Executor 是执行提交的 Runable 任务 的执行器。 这个接口提供了一种机制,使得 task 的提交和 task 如何执行被运行(包括线程的使用和分配)的相分离: ExecutorService ExecutorService 是 Executor 直接的扩展接口,也是最常用的线程池接口,通见的线程池与定时任务线程池都是它的实...