6 AdairJun

尚未进行身份认证

我要认证

莫道谗言如浪深,莫言迁客似沙沉。 千淘万漉虽辛苦,吹尽狂沙始到金。

等级
TA的排名 6w+

数据库连接池DBPool分析(九):Theron库+gtest来测试

国庆节在家里面学习了Theron这个高并发的库的使用方法,获益良多。 Theron的官网:http://www.theron-library.com/最特别的就是Theron 是Actor的模型,而不是object。这一点由于我并非是从JAVA转向的C++语言,所以没有万物皆是对象这个强烈的观点。 一般面向对象的三个特性:组合,继承,和多态。从组合上来说,就是一个class A为了调用c

2015-10-18 17:02:10

数据库连接池DBPool分析(八):redis连接池 redis_connection_pool

更新完上一篇博客的时候恰逢十一黄金周,回家休息了一会。现在补充DBPool的Redis连接池。 我刚开始写mysql_connnection_pool的时候,用的是map这个数据结构来保存连接,每次从池当中取出连接的时候都需要遍历一边map,根据map的第二个参数的bool值来判断是否可用。这样的话效率很低,所以我在这里改用list来保存。每次取出连接的时候都pop_front出来,没次释放连接的

2015-10-18 15:38:57

数据库连接池DBPool分析(七):Redis连接控制 RedisObj

因为这个连接控制的class当中使用了大量的引用,所以设置一个宏IN和OUT,仅仅只是一个标志,标记是输出还是输入。 这个class的设计和MysqlObj的设计非常像,但是不同的是这里并不需要一个对象来专门保存查询值,就因为Redis是key-value的,查询是直接返回一个字符串或者数字。 所以这里只需要一个成员变量来保存查询值,就是redisReply* r_pResult; redis

2015-09-26 19:58:29

数据库连接池DBPool分析(六):gtest

gtest是google的C++测试框架,很好用。 我借鉴了http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html里面的教程来使用gtestgoogle test的单元测试仅需要TEST()和TEST_F()两个宏, TEST:定义一次测试 第一个参数是测试用例名,第二个参数是测试名通过RUN_ALL_TESTS()来运行它

2015-09-26 19:56:19

数据库连接池DBPool分析(五):Makefile

Makefile的设计思想是编译MysqlObj和RedisObj,并将它们链接成静态库和动态库,供外部调用。这里是供gtest来调用。这里参考了leveldb的Makefile的设计思想。这里有个需要小心的地方,因为用到了gtest,所以编译的时候需要链接-lgtest,-lgtest必须要放在-lpthread前面,否则编译会错误还有一个Makefile的magic,我把它称为安静模式,这是我公

2015-09-26 19:54:29

数据库连接池DBPool分析(四):mysql连接池 mysql_connection_pool

这个class的设计和MysqlObj不一样了,不会像MysqlObj提供Connect函数来进行连接,这里我直接就在构造函数当中创建好池,因为如果再提供一个init之类的函数来创建池的话我觉得与这个class的设计语意违背,毕竟池创建好就能直接使用了。在构造函数当中使用到了boost的property_tree,目的就是从config里面读取database.xml或者database.json配

2015-09-26 19:50:31

数据库连接池DBPool分析(三):Mysql连接控制:MysqlObj

这个class的设计是这样的,初始化的时候并不建立连接,仅仅简单地初始化成员变量(IP地址,User,password等),而是单独提供一个Connect函数来建立连接,连接的时候把mysql的编码设置为gb2312,关闭连接也有一个Close函数,析构的时候会调用Close. Dump函数是用来debug用的,将m_pMysql指针指向的值打印出来。MysqlObj并不使用QueryResult

2015-09-26 19:48:59

数据库连接池DBPool分析(二):存放Mysql的查询结果 QueryResult.h

这个class的设计参考了xPool当中的QueryResult.h,我觉得这个设计足够用了。 毕竟这个class的设计思想只有一个,一般来说存放Mysql的查询结果是使用的是二维vector,也就是vectorQueryResult.h#ifndef _QUERYRESULT_H#define _QUERYRESULT_H#include <vector>#include <string>u

2015-09-26 19:47:09

数据库连接池DBPool分析(一):简介

刚刚毕业的本科生,在研究了公司的框架之后,自己花了三天的时间用C++实现了简单的数据库连接池,包括了Mysql。正在加入Redis的支持。请访问我的github:https://github.com/adairjun/DBPool概述所谓池的概念,就是一次性向系统申请多个资源并保存下来,等到程序需要向系统申请资源的时候,就直接向池当中去申请。相当于在执行程序和系统资源之间加了一层。 有高人云:“计

2015-09-26 19:45:03

Ubuntu一键配置脚本

经常在网上看到安装完Ubuntu之后应该做的十件事情之类的文章,于是我自己写了一个Ubuntu的配置脚本: 我的Ubuntu版本是14.04LTS参见我的github地址首先获取当前的目录:#!/bin/bash# 需要sudo来执行dir=`pwd`1,脚本需要sudo来执行,所以需要判断是否具有root权限:function rootness { if [[ $EUID -ne 0

2015-09-06 18:24:03

软件版本GA,RC,alpha,beta,Build 含义

(1)RC:(Release Candidate)   Candidate是候选人的意思,用在软件上就是候选版本。Release.Candidate.就是发行候选版本。和Beta版最大的差别在于Beta阶段会一直加入新的功能,但是到了RC版本,几乎就不会加入新的功能了,而主要着重于除错! 是最终发放给用户的最接近正式版的版本,发行后改正bug就是正式版了,就是正式版之前的最后一个

2015-06-15 18:01:26

apache一键安装脚本

最近在玩apache,首先安装apace要配置apr,apr-util,pcre,而配置这些基本都是千篇一律。所谓程序员的精神就是减少重复性的劳动,下面请看我写的apache安装脚本: 这个脚本我也放到我的github上#!/bin/bash# 需要sudo执行dir=`pwd`#要安装pcre先要安装gcc, g++if [[ `ls /etc|grep redhat-release` !=

2015-06-11 15:41:59

openTSDB ConnectionManager: Unexpected exception from downstream java.io.IOException: Broken pipe

openTSDB有这样的错误:ConnectionManager: Unexpected exception from downstream for [id: 0xf85323a8, /10.65.30.12:3874 => /10.65.150.117:4242] java.io.IOException: Broken pipe at sun.nio.ch.FileDispatch

2015-06-04 16:05:32

hbase shell删除没有用

用Xshell登陆linux主机后,在hbase shell下不能使用backspace和delete删除误输的指令,这是Xshell的配置问题: 在File->Properties->Terminal->Keyboard下,把DELETE/BACKSPACE key sequence选为ASCII 127. 如此以来,就能使用backspace了

2015-06-04 15:55:10

nodejs保存文件问题

从前端那里拿到的jar包出现问题: 保存到本地管理机的jar包的md5sum值与上传的正确md5sum值不相等,而上传 过程 没有错误,说明保存过程中错误: 前端是通过base64转码之后再将jar包内容放进request.body[reqType]里面:先是错误代码:先用base64解码:var jar_content = new Buffer(request.body[reqType].ja

2015-06-04 15:39:00

hive:Access denied for user 'root'@'%'

配置hive全分布模式时候,在mysql里面创建用户:create user ‘hive’ identified by ‘hive’; 然后给hive帐号分配所有权限: grant all privileges on . on ‘hive’ with grant option;结果出现了Access denied for user ‘root’@’%’。后来我先创建数据库hive:create

2015-06-04 15:27:54

c++头文件与cpp的关系

经常在工程中看到的使用头文件的方法就是: 先写一个write函数的cpp:#include <iostream>using namespace std;void write(char* str){ cout<<str<<endl;}再写一个write函数的头文件,而头文件只需要包含write的声明就可以 write.h:#ifndef _WRITE_H#define _WRIT

2015-06-04 15:16:52

.pb.h:9:42: fatal error: google/protobuf/stubs/common.h: No such file or directory

看这个就应该知道是没有找到头文件,那么可以使用g++ 的-I 参数: -I/usr/local/lib/protobuf/include来命令g++在/usr/local/lib/protobuf下查找头文件 以上/usr/local/lib/protobuf/是我的protobuf的安装地址,请替换成你的

2015-06-03 22:09:08

预编译,编译,汇编,链接

预编译的文件扩展名是ii gcc -E hello.c -o hello.i 预编译过程主要处理源代码文件当中的以#开头的预编译指令,比如#include就是把头文件插入到这个位置 #define就是把所有的宏定义展开,还有就是删除所有的注释编译就是把i文件编译成为汇编代码文件,汇编代码扩展名是.s gcc -S hello.i -o hello.s但是现在版本的gcc把预编译和编译两个步骤合

2015-06-03 22:04:28

leveldb的makefile剖析

首先出现在眼前的是这个:OPT ?= -O2 -DNDEBUG-O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高  至于-DNDEBUG我不知道什么意思,麻烦知道的同学告诉我。 然后是这个:$(shell CC="$(CC)" CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \./bu

2015-06-03 21:58:53

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!