旧·时光 | Time

Something that stays in your mind will someday spring up in your life.

MySQL InnoDB 中的锁机制

写在前面 数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武器。

写在前面 数据库本质上是一种共享资源,因此在最大程度提供并发访问性能的同时,仍需要确保每个用户能以一致的方式读取和修改数据。锁机制(Locking)就是解决这类问题的最好武器。 首先新建表 test,其中 id 为主键,name 为辅助索引,address 为唯一索引。 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREME...

MySQL InnoDB 存储引擎简介

MySQL 得益于开放的可插拔设计,允许替换不同的底层存储引擎,InnoDB 就是其中涌现的代表,自 5.5.8 以来已经成为 MySQL 的默认存储引擎

InnoDB 存储引擎 MySQL 得益于开放的可插拔设计,允许替换不同的底层存储引擎,InnoDB 就是其中的代表,最初由第三方公司开发后被 Oracle 收购,是 OLTP 场景下核心表的首选存储引擎,自 5.5 以来已经成为 MySQL 的默认存储引擎。 InnoDB 是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方...

基于 “不可变类” 实现一个线程安全的 Integer 计数器

不可变对象最核心的地方在于不给外部修改共享资源的机会,从而避免多线程情况下由于争抢共享资源导致的数据不一致

写在前面 众所周知,java.lang.String 类没有任何强制同步的代码,但它是线程安全的,原因在于它是不可变类,每次对其操作都是返回一个新的 String 对象。合理使用不可变对象可以达到 lock-free 的效果。 不可变对象最核心的地方在于不给外部修改共享资源的机会,从而避免多线程情况下由于争抢共享资源导致的数据不一致,又是 lock-free 的,避免了用锁带来的性能损耗...

用 Wait 和 Notify 实现 “生产者-消费者” 模型

在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理

写在前面 在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者,中间的仓库可以抽象成任何缓冲区类型的存储介质。 那么这种模型有什么优点呢?第一是解耦,可以将生产者和消费者分隔开,耦合度降低;二是支持并发,生产者把制造出来的数据往缓冲区一丢,就可以...

Java 中的 Wait 和 Notify 机制

Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到

写在前面 Wait 和 Notify 是 Java 面试中常见的问题,但是在平时工作中可能不常见到。大家或多或少知道些背景知识,例如二者均为 Object 类的方法,而不是 Thread 特有的(因为锁是每个对象都具有的特性,因此操作锁的方法也紧跟对象,没毛病),且都只能在同步代码块中调用(即前提是先获得对象的监视器锁,一般来说在 synchronized 代码块中使用),否则抛出异常 I...