- 博客(41)
- 资源 (5)
- 收藏
- 关注
原创 Flink Checkpoint机制分析
原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51644390可靠性是分布式系统实现必须考虑的因素之一。Flink基于Chandy-Lamport分布式快照算法实现了一套可靠的Checkpoint机制,可以保证集群中某些节点出现故障时,能够将整个作业恢复到故障之前某个状态。同时,Checkpoint机制也是Flink实现Exa...
2020-04-10 18:48:53
4589
原创 【Redis源码剖析】 - Redis持久化之AOF
原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51644390Redis源码剖析系列文章汇总:传送门Redis提供了两种持久化方法:RDB和AOF。在前面一篇文章中我们已经介绍过RDB持久化机制,今天我们来看看AOF持久化方法。本文主要涉及aof.c文件。在前面一篇文章中,我们看到RDB持久化实际上就是把Redi...
2016-06-12 18:24:02
10927
原创 【Redis源码剖析】 - Redis持久化之RDB
原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51553370Redis源码剖析系列文章汇总:传送门Redis是一个高效的内存数据库,所有的数据都存放在内存中。我们知道,内存中的信息会随着进程的退出或机器的宕机而消失。为此,Redis提供了两种持久化机制:RDB和AOF。这两种持久化方式的原理实际上就是把内存中所有数据的...
2016-06-02 09:50:59
12337
1
原创 【Redis源码剖析】 - Redis IO操作之rio
原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51433696Redis源码剖析系列文章汇总:传送门Reids内部封装了一个I/O层,称之为rio。今天我们就来简单介绍一下rio模块的具体实现。本文主要涉及rio.h和rio.c两个文件。1、rio结构体关于文件读写操作和buffer的操作主要基于rio对...
2016-05-17 10:37:25
7321
原创 【Redis源码剖析】 - Redis之数据库redisDb
原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/51321282Redis源码剖析系列文章汇总:传送门今天,我们来讨论两点内容:一是Redis是如何存储类型对象的,二是Redis如何实现键的过期操作。本文介绍的内容主要涉及db.c和redis.h两个文件。1、redisDb介绍Redis中存在“数据库”的概...
2016-05-05 21:38:05
14017
1
原创 【Redis源码剖析】 - Redis之事务的实现原理
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51262268Redis源码剖析系列文章汇总:传送门今天为大家带来Redis中事务部分的源码分析。Redis的事务机制允许将多个命令当做一个独立的单元运行,主要包括multi、exec、watch、unwatch、discard五个相关命令。如果你还不熟悉这几个命令,可以先...
2016-04-27 20:03:44
17200
4
原创 【Redis源码剖析】 - Redis数据类型之有序集合zset
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51231967Redis源码剖析系列文章汇总:传送门这周事情比较多,原本计划每周写两篇文章的任务看来是完不成了。今天为大家带来有序集合zset的源码分析。Redis中的zset主要支持以下命令:zadd、zincrby zrem、zremrangebyrank、...
2016-04-24 14:59:55
11111
3
原创 【Redis源码剖析】 - Redis数据类型之列表List
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51166709Redis源码剖析系列文章汇总:传送门今天为大家带来Redis五大数据类型之一 – List的源码分析。Redis中的List类型是一种双向链表结构,主要支持以下几种命令:lpush、rpush、lpushx、rpushx lpop、rpop、...
2016-04-16 16:30:24
7934
原创 【Redis源码剖析】 - Redis数据类型之redisObject
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51140041Redis源码剖析系列文章汇总:传送门在前面六篇文章中,我们逐一分析了字符串sds、双向链表list、字典dict、压缩列表ziplist、压缩字典zipmap、整数集合inset这几种Redis内置数据结构的源码实现(实际上还有一种称作skiplist的结构...
2016-04-13 09:54:48
8380
原创 【Redis源码剖析】 - Reids内置数据结构之整数集合intset
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51124203Redis源码剖析系列文章汇总:传送门今天我们来介绍Redis中一个比较简单的内置数据结构 – 整数集合intset。1、intset存储结构整数集合,顾名思义,就是存储一系列整数的集合。在Redis中,intset结构体的定义如下:/* ...
2016-04-11 18:57:45
4952
原创 【Redis源码剖析】 - Redis内置数据结构之压缩字典zipmap
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230Redis源码剖析系列文章汇总:传送门今天为大家带来Redis中zipmap数据结构的分析,该结构定义在zipmap.h和zipmap.c文件中。我把zipmap称作“压缩字典”(不知道这样称呼正不正确)是因为zipmap利用字符串实现了一个简单的hash_t...
2016-04-10 10:44:41
5584
原创 【Redis源码剖析】 - Redis内置数据结构之压缩列表ziplist
Redis提供了一种称作ziplist的数据结构,称作压缩列表。ziplist使用一串字符串来实现双向链表结构。与list结构相比,ziplist可以减少存储空间(主要是节省了链表指针的存储空间开销),ziplist在实现上并不存储上指向上一个链表节点和指向下一个链表节点的指针,而转为存储上一个节点长度和当前节点长度从而在大多数情况下节省很多空间开销。
2016-04-06 13:53:30
7895
原创 【Redis源码剖析】 - Redis内置数据结构之字典dict
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51018337Redis源码剖析系列文章汇总:传送门今天我们来讲讲Redis中的哈希表。哈希表在C++中对应的是map数据结构,但在Redis中称作dict(字典)。Redis只是用了几个简单的结构体和几种常见的哈希算法就实现了一个简单的类似高级语言中的map结构。下面我们...
2016-03-30 19:08:01
42096
9
原创 【Redis源码剖析】 - Redis内置数据结构之字符串sds
今天花了一个晚上的时间分析了Redis中字符串操作的实现,源文件为sds.h和sds.c。
2016-03-28 21:07:56
6261
4
原创 【Redis源码剖析】 - Redis内置数据结构之双向链表list
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50938028Redis源码剖析系列文章汇总:传送门在《Redis学习笔记》系列的前面几篇文章中,我们分别讲述了Redis的几种常用数据结构(分别是string、hash、list、set、zset)和事务处理。在接下来的文章中,我们就要深入到Redis的源码层,了解Red...
2016-03-20 19:43:34
4414
1
原创 【Linux进程间通信】 - 消息队列
今天我们来介绍一下如何使用消息队列来进行进程间通信。1、消息队列消息队列是由内核维护的一种链式结构。链表中每一个记录又称作消息,消息具有特定的格式和优先级别。各个进程通过消息队列标识符来引用消息队列,这样,写进程叫可以按照一定的规则添加新的消息,读进程可以按一定的规则取走消息(具体按什么规则我们稍后讨论)。和前面介绍的共享内存和信号量一样,消息队列是随内核持续的,也就是说我们使用完毕后需要显式删除。
2016-03-19 15:37:09
2434
原创 【Linux进程间通信】 - 信号量
前面我们在介绍共享内存(传送门: 【Linux进程间通信】 - 共享内存)这种进程间通信时方式时提到,使用共享内存通信时需要使用同步机制来控制多个进程对统一内存区的读写操作。今天我们就来讲述一种常用的多进程共同机制 – 信号量。1、什么是信号量?在多进程环境下,为了防止多个进程同时访问一个公共资源而出现问题,需要一种方法来协调各个进程,保证它们能够合理地使用公共资源。信号量就是这样一种机制。
2016-03-16 17:01:01
3167
原创 【Linux进程间通信】 - 共享内存
今天我们来介绍Linux下最高效的一种进程间通信方式 – 共享内存。什么是共享内存?顾名思义,共享内存就是两个(或多个)进程共同占有一段内存空间,这些进程可以是有亲缘关系的进程,也可以是完全不相关的进程。同一块物理内存空间被映射到两个进程,两个进程都可以访问这段共享空间从而实现了进程间通信。
2016-03-14 20:54:38
6079
原创 【Linux进程间通信】 - 命名管道FIFO
在前面一篇文章中【Linux进程间通信】 - 匿名管道中,我们介绍了Linux/Unix系统中最古老的一种进程间通信方式 – 匿名管道。此外,我们也讲解了匿名管道的几个局限性,特别是匿名管道只能用于父子进程或兄弟进程间,无法在不相关的进程间交换数据。为了克服匿名管道的这个限制,有人又提出了一种称作命名管道(FIFO)的进程间通信方式。今天我们就来介绍一下这种通信手段。
2016-03-08 16:55:44
3162
原创 【Linux进程间通信】 - 匿名管道
进程间通信,英文又称作IPC(InterProcess Communication)就是在不同的进程之间交换信息。我们知道,进程的用户是相空间互独立的,不能相互访问,所以为了使得进程间可以相互通信,操作系统需要提供一种介质使通信双方都可以访问。今天我们就来介绍一种最古老的进程间通信方式 -- 管道。
2016-03-07 19:16:41
2634
原创 【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr。在学习weak_ptr之前最好对shared_ptr有所了解。如果你还不知道shared_ptr是何物,可以看看我的另一篇文章【C++11新特性】 C++11智能指针之shared_ptr。
2016-03-01 15:42:08
26965
8
原创 【C++11新特性】 C++11智能指针之unique_ptr
在前面一篇文章中,我们了解了C++11中引入的智能指针之一shared_ptr,今天,我们来介绍一下另一种智能指针unique_ptr。unique_ptr介绍unique是独特的、唯一的意思,故名思议,unique_ptr可以“独占”地拥有它所指向的对象,它提供一种严格意义上的所有权。
2016-02-28 15:20:04
6522
1
原创 【C++11新特性】 C++11智能指针之shared_ptr
C++中的智能指针首先出现在“准”标准库boost中。随着使用的人越来越多,为了让开发人员更方便、更安全的使用动态内存,C++11也引入了智能指针来管理动态对象。在新标准中,主要提供了shared_ptr、unique_ptr、weak_ptr三种不同类型的智能指针。接下来的几篇文章,我们就来总结一下这些智能指针的使用。今天,我们先来看看shared_ptr智能指针。
2016-02-26 15:21:02
30869
1
原创 【C++11新特性】 Lambda表达式
C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。今天,我们就来简单介绍一下C++中Lambda表达式的简单使用。
2016-02-22 14:03:27
5234
原创 【Redis笔记(七)】 Redis中的事务
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50675302在【Redis学习笔记】前面几篇文章中,我们简单介绍了Redis中的五种数据结构相关的命令,今天,我们来介绍一下Redis中的事务Transaction。一、什么是事务如果你之前接触过MySQL、Oracle等数据库,一定听说过“事务”的概念。所谓...
2016-02-16 16:31:59
2425
原创 【Cocos2d-x源码分析】 UserDefault如何保存本地数据
Cocos2d-x提供了UserDefault类来在本地保存简单的游戏数据。今天我们的目标就是分析UserDefault是如何工作的。本文的分析的是Cocosd2-x 3.8版本的源码,使用Vistual Studio2013。
2016-02-06 17:24:15
3563
原创 【Redis笔记(六)】 Redis数据结构 - 有序集合zset
Redis不仅仅提供了无序的集合(sets),还提供了有序的集合sorted sets。在有序集合中,每个元素都关联有一个权重或者称作分数,作为排序的依据。
2016-02-05 18:20:39
3710
1
原创 【Redis笔记(五)】 Redis数据结构 - set集合
今天到了我们Redis学习笔记的第五篇,今天我们来介绍set集合数据结构。set类型介绍和C++或Java编程语言中的set类型一样,Redis中的set类型也是一种无序集合。
2016-01-27 15:19:26
6460
原创 【Redis笔记(四)】 Redis数据结构 - list链表
经过前面的介绍,我们学习了Redis中string字符串、hash哈希这两种数据结构的常用命令。这篇文章将介绍Redis中的list – 列表的相关操作。
2016-01-24 15:29:44
7194
原创 【Redis笔记(三)】 Redis数据结构 - hash哈希
在上一篇文章中【Redis笔记(二)】 Redis数据结构-string字符串中,我们学习了Redis最基本的数据结构string,今天我们的主角是 – hash(哈希)类型。hash类型介绍hash是Redis2.0后增加的一种数据类型,类似大多数编程语言中的map数据结构一样,Redis是键值对的集合,也就是说它存放的是字符串和字符串之间的映射。由于这个特性,hash特别适用于存储一个对象。将一
2016-01-20 20:15:55
8883
原创 【Redis笔记(二)】 Redis数据结构 - string字符串
在前面一篇文章【Redis笔记(一)】 环境配置中,我们了解了什么是Redis、如何在Ubuntu中安装Redis和hiredis,知道了Redis有五种基本的数据结构,今天我们就来学习一下Redis中最基本的数据结构 – 字符串string。string类型介绍与大多编程语言中的字符串类型一样,Redis的字符串也是字符序列,它是Redis中最为基础的数据存储类型,具有以下特点:字符串类型是Re
2016-01-12 11:30:18
4371
1
原创 【Redis笔记(一)】 环境配置
1、Redis是什么Redis是什么?如果你还不知道,可以Google or Baidu一下。Redis是一个开源的、使用C语言编写的、基于内存的、先进的key-value存储系统,并用于构建高性能,可扩展的Web应用程序的完美解决方案。…(这个定义是在太拗口了)在这里,我不打算花很多篇幅对Redis进行介绍,需要的童鞋可以到官网了解,官网地址是:redis.io。从GitHub上我们可以看到,Re
2016-01-11 16:15:44
1639
原创 【C++11新特性】 nullptr关键字
熟悉C++的童鞋都知道,为了避免“野指针”(即指针咋爱首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”:如下:int *p1 = NULL; // 需要引入cstdlib头文件int
2016-01-07 19:51:05
10791
1
原创 【C++11新特性】 auto关键字
熟悉脚本语言的人都知道,很多脚本语言都引入了“类型自动推断”技术:比如python,可以直接声明变量,在运行时进行类型检查。随着C++11标准的发布,C++语言也引入了类型自动推断的功能,这就是我们今天要介绍的auto关键字。C++是一种强类型语言,声明变量时必须明确指出其类型。但是,在实践中,优势我们很难推断出某个表达式的值的类型,尤其是随着模板类型的出现,要想弄明白某些复杂标萨是的返回类型就变得
2016-01-06 16:20:17
9466
1
原创 【C++拾遗】 C++虚函数实现原理
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50454819我们知道,与C语言相比,C++在布局和存取时间上的额外开销主要是由虚函数(virtual function)机制和虚继承(virtual base class)机制引起的。在前面一篇文章中,我们从内存布局的角度入手,分析了虚继承的实现原理,传送门:从内存布局看C++虚继
2016-01-04 15:47:39
7201
6
原创 【Cocos2d-x源码分析】 FileUtils如何跨平台查找文件
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50424730在Cocos2d-x中,如果我们需要创建一个资源,只要调用静态函数Sprite::create(string filename)函数,引擎就会到Resources目录下找到相应的图片并为我们创建一个精灵实例。大家有没有想过,这个过程是怎么实现的呢?我们只是提供了图片的名
2015-12-30 19:03:29
3298
原创 【Cocos2d-x源码分析】 Cocos2d-x内存管理解析
在使用Cocos2dx时,当我们需要某个对象实例,只要简单地调用相应静态create方法就可以得到该对象实例,使用完之后我们也无需手动地释放该对象内存而没有产生内存泄露问题。你知道其中的原理是什么么?今天我带着这个疑问,通过阅读Cocos2d-x的源码来探讨一下其内存管理的方法。
2015-12-15 16:50:32
2038
原创 【C++拾遗】 C++函数重载、重写、重定义的区别
函数重载(overload)函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:(1)相同的范围(在同一个作用域中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。(5)返回值可以不同;函数重写(也称为覆盖 override)函数重写是指子类重新定义基类的虚
2015-09-16 17:00:55
9529
原创 【C++拾遗】 explicit关键字
问题我们知道,C++在内置类型之间存在隐式类型转换。而在类类型中,也存在这样一种类型转换:当一个类的构造函数只有参数时,会将该类型的一个值隐式转换为对应的类类型。比如下面一个例子:#include using namespace std;class Example{public: int e; Example(int n) { e = n; }};int mai
2015-09-11 11:03:04
1075
原创 【C++拾遗】 从内存布局看C++虚继承的实现原理
准备工作1、VS2012使用命令行选项查看对象的内存布局微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在[工具(T)]选项下找到“Visual Studio命令提示(C)”后点击即可。切换到cpp文件所在目录下输入如下的命令即可 c1 [filename].cpp
2015-08-27 16:49:10
20079
25
Spring+SpringMVC+MyBatis+Shiro框架
2015-11-21
SwipeRefreshLayoutDemo
2014-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人