July 11, 2017

Zookeeper学习笔记

在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,称之为事务操作或者更新操作,一般包括数据节点的创建与删除、数据节点内容更新和客户端会话创建与失效等操作。

临时节点是在客户端会话失效,而非TCP链接断开的时候会被自动清除。

Zookeeper规定临时节点不能创建子节点。也就是说临时节点只能是叶子节点。

Zookeeper中每个数据节点除了存储数据内容外,还会存储数据节点本身的一些状态信息。

Stat结构字段和说明如下

状态属性

说明

czxid

Created ZXID,表示该数据节点被创建时候的事务ID

mzxid

Modified ZXID,表示该......

June 26, 2017

Netty中的一些小问题

关于isActive()方法:

isActive()这个方法在整个流程中都会用到,用来判断对应的链路是否激活。定义如下:

/**

* Return {@code true} if the {@link Channel} is active and so connected.

*/

boolean isActive();

Server端:

Server端的实现在NioServerSocketChannel.java中,实现如下:

@Override

public boolean isActive() {

return javaChannel().socket().isBo......

June 08, 2017

Redis源码学习之复制

占坑,有时间再整理

June 04, 2017

深入学习FutureTask

第一部分:What

在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,因此Java 1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果。本文会简要的介绍使用方法,然后会从源代码角度分析下具体的实现原理。

本文以Java 1.7的代码进行分析。

第二部分:How

Callable接口

对于需要执行的任务需要实现Callable接口,Callable接口定义如下:

public interface Callable<V> ......

May 30, 2017

Redis源码学习之Redis事务

Redis作为一个内存型数据库,同样支持传统数据库的事务特性。这篇文章会从源代码角度来分析Redis中事务的实现原理。

What

Redis事务提供了一种将多个命令请求打包,然后一次性、按照顺序地执行多个命令的机制,并且在事务执行的期间,服务器不会中断事务而去执行其他不在事务中的命令请求,它会把事务中所有的命令都执行完毕才会去执行其他的命令。

How

Redis中提供了multi、discard、exec、watch、unwatch这几个命令来实现事务的功能。

Redis的事务始于multi命令,之后跟着要在事务中执行的命令,终于exec命令或者discard命令。加入事务中的所有命令......