Mybatis技术内幕

日志在Java开发中常用的日志框架有Log4j、Log4j2、Apache Commons Log、java.util.logging、slf4j等,这些工具对外的接口不尽相同。为了统一这些工具的接口,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。适配器

Redis设计与实现-集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。节点一个Redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将各个独立的节点连接起

Redis设计与实现-RDB持久化

Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到

Redis设计与实现-数据库

服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组中的每个项都是一个redis.h/redisDb结构,每个redisdb结构代表一个数据库。dbnum属性的值由服务器配置的database选项决定,默认情况下,该选项的值为

Redis设计与实现-对象

Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面介绍的数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来

Redis设计与实现-数据结构与对象

简单动态字符串Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作为字符串字面量(st

Zookeeper阅读笔记-Zookeeper技术内幕

系统模型我们首先将从数据模型、节点特性、版本、Watcher和ACL五方面来讲述Zookeeper的系统模型。数据模型Zookeeper的试图结构和标准的Unix文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的数据节点概念,我们称之为ZNode。ZNode点是Zoo

Zookeeper阅读笔记-Zookeeper与Paxos

Zookeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面,Zookeeper并没有直接采用Paxos算法,而是采用了一种被称为ZAB(Zookeeper Atomic Broadcast)的一致性协议。初

Zookeeper阅读笔记-一致性协议

2PC与3PC在分布式系统中,每一个机器节点虽然能够明确地知道自己在进行事务操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果。因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为协调者(Coordinator)的组件来统一调度所

InnoDB存储引擎笔记-事务

事务的实现事务的隔离性由锁来实现的。原子性、一致性、持久性通过数据库的redo log和undo log来完成的。redo log称为重做日志,用来保证事务的原子性和持久性。undo log用来保证事务的一致性。redo和undo的作用可以视为是一种恢复操作,redo恢复提交事务修改的页操作,而un