专注java技术,热爱长跑和阅读开源代码 邮箱 lebron374@163.com
开篇 PalDB在我的工作中被大面积使用,场景我就不描述了,这里我只想直白的说一句,这个系列的PalDB博文绝对是国内最详细的,如果有兴趣非常建议收藏了好好看看。
session创建过程 在mybatis的常规用法当中,通过sqlSessionFactory.openSession()来创建SqlSession对象,这里的sqlSessionFactory就是在解析配置后生成的SqlSession的工厂。
开篇 过去一周忙着上线一个线上服务,没时间阅读源码,幸好服务已经顺利上线,可以抽空开始mybatis的系列了,没错这周开始准备开启mybatis的整个系列,欢迎大家订阅。
这是一本描写魏晋名士的卑微与骄傲的书,它很好的承接了秦汉三国魏晋南北朝这段历史,后面的隋唐的历史我想很多人在电视剧的教育下应该很了解了,所以这本书可以帮助你很好的弥补历史上的一段空白。
第一次写关于电影的观后感,献给徐峥的《我不是药神》的电影,相信我这是一部即使我剧透了一部分的电影内容你依然会去电影院看的现实题材电影。这或许是徐峥截至目前为止演的最有冲击力的一部电影 电影的故事主线是阿三的国度印度生产一种印度版的白血病专用药格列宁,价格只有正规市场价格的10%左右,一个现实社会中的小人物阴差阳错的走上了代人“走私药品”的道路,为很多因为高价买不起只能等死的白血病人带来希望的故事。
花了一个星期的时间看了《天才地理学》,花了一晚上的时间看了《改变截取的独立小店》,总体感觉这两本书的豆瓣评分都有点虚高,前者豆瓣评分7.8分,后者豆瓣评分8.0,我觉得如果我来打分的话,两者统统4分。
redis 选主过程分析 当slave发现自己的master变为FAIL状态时,便尝试进行Failover,以期成为新的master。由于挂掉的master可能会有多个slave。
概述 好久没写概述了,之所以这里要增加一个概述是因为这个章节的内容我找不到一个很好形式来表达自己想表达的内容,因而只能增加一个概述来帮助自己梳理一下思路。
cluster 相关数据结构 在redis cluster的概念当中有一个槽(slot)的概念,也就是说在redis的cluster中存在2**14=16384个槽分布在集群当中,所以在宏定义当中REDIS_CLUSTER_SLOTS的值为16384.
TTL存储的数据结构 redis针对TTL时间有专门的dict进行存储,就是redisDb当中的dict *expires字段,dict顾名思义就是一个hashtable,key为对应的rediskey,value为对应的TTL时间。
redis的数据恢复过程 redis的数据载入主要是指redis重启时候恢复数据的过程,恢复的数据总共有两种: aof 数据文件 rdb 数据文件 数据恢复的过程是二选一的过程,也就是如果开启aof持久化那么就会使用aof文件进行恢复,如果没有才会选择rdb文件进行恢复。
redis rdb和aof持久化的区别 关于这两者的区别,网上有很多资料,这里我只想补充下自己理解的两个比较核心的点: 持久化过程是否异步,rdb持久化是后台异步进程执行,aof是同步执行 持久化内容格式,rdb是直接存储实际内存存储数据,aof是...
redis aof缓存数据结构 redis用于存储aof内存数据的数据结构是aof_buf数据结构,所有数据先追加到内存的aof_buf后,再通过定时任务检查是否能够持久化到磁盘文件当中。
redis的主从超时检测主要从以下三个方面进行判断,分别是主监测从、从监测主、正常关闭。 主监测从:slave定期发送replconf ack offset命令到master来报告自己的存活状况 从监测主:master定期发送ping命令或者\n命...
如果用一句话概括想读这本书的动机,那就是我们的阿三同志在三年时间里让微软的市值翻了三番(2000亿到现在的6000亿),也就是说这位阿三同志在过去的3年时间真正的引领着微软这头大象在起舞。
redis 主从同步master端处理 redis 主从同步的过程始于一系列类似tcp三次握手的过程,归于"sync/psync"命令。分析redis主从同步master端的处理逻辑需要从syncCommand的函数开始进行分析。
redis 主从命令 redis的主从同步始于命令SLAVEOF host port,通过这个命令能够建立主从关系。 SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
已经记不得从哪里看到这本书了,之所以会买这本书是被这本书中描写黑人肤色的段子给吸引了,想必大家应该都质疑过“非洲人真的黑到天黑人不见吗”的问题,如果你想解开心中的疑惑,那么推荐你买这本书,因为作者的文字的确非常幽默,阅读起来非常轻松,还记得我提过的《反脆弱》这本书么,如果从阅读的喜感来说简直一个是天一个是地,到底哪个是天哪个是地我想不用说大家也会明白。
今天做了几道滑动窗口的题,稍微总结一下。 起因源于早上在leetcode上pick one,随机到了一个easy的题目,想着随便做了,结果半天也找不到最优解,耗时300多ms,A是A了,不过就是暴力罢了。
redis的pub/sub当中主要分为subscribe/unsubscribe&psubscribe/punsubscribe两种模式,在这两种模式下支持publish命令。
写在前面 这一章节涉及的内容比较简单,主要是为了讲清楚redis server端如何维持和client相关的连接的,基本从以下几个方面展开描述: redis server端采用何种数据结构维护连接信息 redis server端创建和client相关连接的过程 redis client相关的数据结构定义 redis server核心数据结构 redis server作为redis最核心的数据结构,基本上redis所有相关的信息都会在这里有体现,这里列出几大块。
zset底层存储结构 zset底层的存储结构包括ziplist或skiplist,在同时满足以下两个条件的时候使用ziplist,其他时候使用skiplist,两个条件如下: 有序集合保存的元素数量小于128个 有序集合保存的所有元素的长度小于64字节 当ziplist作为zset的底层存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值。
set底层存储 redis的集合对象set的底层存储结构特别神奇,我估计一般人想象不到,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表(key为set的值,value为null)。
hash底层存储结构 redis的哈希对象的底层存储可以使用ziplist(压缩列表)和hashtable。当hash对象可以同时满足一下两个条件时,哈希对象使用ziplist编码。
redis list数据结构 redis list数据结构底层采用压缩列表ziplist或linkedlist两种数据结构进行存储,首先以ziplist进行存储,在不满足ziplist的存储要求后转换为linkedlist列表。
redis数据存储结构 redis的内部整体的存储结构就是一个大的hashmap,内部实现是数组实现hash,冲突通过挂链去实现,然后每个dictEntry就是一个key/value对象。
概述 这篇文章的目的是为了描述redis server在处理client命令的执行过程,大概包括流程图、源码、以及redis的命令格式说明,redis的通信协议参考自redis的官网。
事件驱动 redis服务器是一个事件驱动的程序,内部需要处理两类事件,一类是文件事件(file event),一类是时间事件(time event),前者对应着处理各种io事件,后者对应着处理各种定时任务。
过期数据删除策略 redis的过期数据删除策略使用了惰性删除和定期删除两种策略: 惰性删除发生在redis处理读写请求的过程,如get/set等命令。
redis 存储结构 redis的存储结构从外层往内层依次是redisDb、dict、dictht、dictEntry。 redis的Db默认情况下有15个,每个redisDb内部包含一个dict的数据结构。
概述 最近做了个服务化项目,基于dubbo项目的,所以抽空把原本想看dubbo源码的愿望给实现了,等把dubbo的事情了解了再继续去完善flume部分的源码阅读。
概述 虽然在上一篇博文《flume - 启动过程分析(1)》我们已经了解了flume相关组件的配置的加载以及启动过程,但却遗漏了组件初始化的过程,也就是说缺少了根据配置生成组件的过程,这篇文章就是为了弥补这个过程。
内容简介 在错综复杂的新生态下,预测已经成为不可能,运营的关键已从控制—命令式转变为赋能——分布式,唯有如此才能在新生态下取得成功。 一手打造了全球最强战斗力的美军特种作战司令部指挥官的斯坦利•麦克里斯特尔,摒弃掉存在了一个多世纪的常规思维,在一场残酷的战争中对特遣部队进行重塑,将其打造成新物种:一张在沟通上极度透明、在决策上去中心化的网络。
阿里妹导读:代码分支模式的选择并没有绝对的正确和错误之分,关键是与项目的规模和发布节奏相匹配。阿里协同研发平台在经过众多实践历练后,总结出了一套独创的分支管理方法:AoneFlow,通过兼备灵活高效与简单实用的流程,保障阿里旗下众多产品的交付。
概述 这个文章是flume源码系列的开门篇,也是本人第一次阅读flume相关的代码,文章会参考一些已有的文章并结合个人的理解,当然所有参考的文章我会在文章末尾给出链接以表示尊重原创。
概述 先打一个预告,写完这篇zookeeper-client端的文章以后,基本上zookeeper的系列已经完结了,后面会进入flume系列的源码阅读当中,敬请期待,而这篇文章也是上周去听分享时候砸场子答应别人写的文章。
概述 这是写zookeeper过程中最轻松的一篇文章了,因为zookeeper的data存储结构是比较简单的,所以整个文章也比较简单。 zookeeper数据结构 首先zookeeper的核心保存结构是一个DataTree数据结构,其实内部是一个Map nodes的数据结构,其中key是path,DataNode是真正保存数据的核心数据结构。
概述 这篇文章目的主要是为了讲解清楚zookeeper启动过程中启动各类服务,说白了就是启动了线程提供服务,希望通过这个文章的梳理能够让大家对整个zookeeper的线程架构有一个清晰的印象。
watcher的特征 zookeeper的一大特点之一就是watch机制,所有基于zookeeper的消息通知机制基本上都是建议在watcher机制之上的,比如业界比较有名的由360公司开源的Qconf的底层就是基于这个实现的,本章其实就是想将zookeeper的watcher的数据存储、watcher的添加、watcher的触发整个过程讲解清楚,方便大家有个清晰的认识。
概述 本文的主要目的是分析zookeeper的整个数据写入过程,相信大家或多或少都听说过zookeeper是一个集中式的单点写入过程,所有的写入请求都会转发到Leader来完成数据的写入过程,而且在整个写入过程当中会涉及到二次提交(proposal/commit)过程,希望通过这篇文章能够帮助感兴趣的人建立一个整体的流程印象。
转自:http://www.cnblogs.com/wulaoer/p/5538721.html 在使用mac的时候有点不太习惯,主要原因是因为在用windows的时候有很多的软件都用习惯了一下改变有点适应不了。
概述 之所以会有这篇文章,是因为我原本想理清楚集群模式下client连接follower的场景下发起写操作,如何被路由到leader以及leader如何通过两阶段提交最终持久化数据 ,但是在这个过程中我发现需要一些前置过程需要理一理,否则理解那个复杂的过程会特别饶,基于将复杂逻辑进行拆分的原则,就有这篇文章。
概述 在写完zookeeper的写数据过程的文章之后,需要继续写一篇读数据过程的文章,这篇文章就是因此而来的。我们直接通过getData作为一个例子来说明这个过程,其他的exist/getChildren之类的方法类似。
概述 了解完session建立过程以后,我们接下去应该了解的就是zookeeper的读写两个过程,这里的标题之所以增加standalone模式,是因为大家知道zookeeper在集群模式下的写入必须要考虑到数据的最终一致性过程,但是因为时间问题暂时只能对standAlone场景下的读写进行分析,这篇文章主要对于写进行分析。
概述 在讲解完zookeeper核心的选举部分的功能逻辑之后,另外一个我个人觉得需要理解的就是zookeeper的client-server之间的连接的建立过程,因为除了zookeeper各个节点之间的通信外,另外一大块就是zookeeper作为server端与client端的交互,包括之前的连接建立以及后续的各种操作命令入get/set等操作,这个博文专注于讲清楚前面部分的概念,后面部分的逻辑会有专门的一篇博文来阐述。
最近花了大约两个星期的时间零零散散的阅读了一本叫作黑匣子思维的书,书的观点比较明确且归功于翻译者的水平,整本书看起来还算比较轻松的,按照正常的阅读速度我估计一个周末就可以阅读完了。
眨眼间2018的春节在欢声炮竹中过完了,相逢是一件愉快的事情,只可惜美好的时光永远是短暂的,不知道这是不是人的一种本性,时间在和谐的状态下总是过得飞快。
概述 在讲清楚了《zookeeper选举》的过程之后,突然有个疑问那就是既然完成了选举了,那么zookeeper集群中各个角色将会如何进入工作,以及如何应对leader退出重新发起选举呢?然后就继续阅读才有了这篇博文。
概述 zookeeper核心知识点之一就是集群之间的选举,而且很多文章都把选举跟paxos进行对比,其实我觉得选举过程其实跟paxos没什么关系(的Paxos算法和zookeeper的关系)。
概述 趁着五一放假抽空看了一下zookeeper的源码,一开始是打算学习zookeeper的选举过程的,后来发现似乎可以一并多写几篇文章,就有了这篇zookeeper启动的文章。