用Bollger记录技术之路的点滴...

关注高性能linux网络编程,NoSQL, c/c++/java ~~~ weibo @语_行 http://weibo.com/201281062~~~ twitter @JerryVector https://twitter.com/JerryVector
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年3月1日

摘要: Linux下,当我们用mysql c api 去操作mysqldb的时候,默认情况下,程序会以Latin1这种字符集去进行sql操作,这种情况,很可能就会出现乱码,比如,数据库设置的字符集是utf8, 然后我们通过程序向其中插入一条记录,然后我们去查询的时候,就会出现乱码。为了解决这个问题,我们可以调用int mysql_set_character_set(MYSQL *mysql, const char *csname) 这个函数,去对每一个到mysql的连接设置对应字符集,就可以解决乱码问题。例如下代码:MYSQL mysql;mysql_init(&mysql);if (!mys 阅读全文

posted @ 2013-03-01 22:50 语行 阅读(5190) 评论(0) 推荐(0) 编辑

2013年2月28日

摘要: 这段用php写一个导数据的脚本,此前在查询数据的时候,一直是以字段A作为基准字段去查询的,今天修改了下,以字段B作为基准字段去查询,然后,脚本的执行速度就变得很慢很慢,便很奇怪。后边经过排查,发现是db中没有对字段B建立索引,而且数据量比较大,所以查询的速度很慢,导致脚本执行速度慢,后边对B建立索引解决。小结,在查询数据库的时候,一定要对查询的基准字段建立索引。 阅读全文

posted @ 2013-02-28 13:25 语行 阅读(191) 评论(0) 推荐(0) 编辑

2013年2月26日

摘要: C风格的字符串,就是一个以0字符结束的字符数组,我们知道,C++提供了string这个标准库用以支持对字符串的处理,我们能很方便的将一个C风格的字符串放进一个string, 不过当我们在调用一些以C风格字符串为参数的函数的时候,就需要以C风格字符串的形式提取出string的值,这里,c_str()能完成这件事string str = "c style string!";void f() { printf("the c style string:%s.\n", str.c_str()) } 阅读全文

posted @ 2013-02-26 13:26 语行 阅读(197) 评论(0) 推荐(0) 编辑

2013年2月5日

摘要: twemproxy exploretwemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。 搜索了不少的开源代理项目,知乎实现的python分片客户端。node的代理中间层,还有各种restfull的开源代理。RedBrigeC + epoll实现的一个小的webserverredis自身执行lua脚本的功能来执行redis命令访问时在url中带上lua 阅读全文

posted @ 2013-02-05 14:36 语行 阅读(18354) 评论(0) 推荐(0) 编辑

2012年11月28日

摘要: 简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之 上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。并发模式之内核 这种并发模式的内核只需要协程和通道就够了。其中协程负责执行代码,通道负责在协程之间传递事件。 并发编程一直以来都是个非常困难的工作。要想编写一个良好的并发程序,我们不得不了解线程, 锁,se... 阅读全文

posted @ 2012-11-28 12:45 语行 阅读(16733) 评论(1) 推荐(4) 编辑

2012年11月22日

摘要: 我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。大量的封装好的类库也屏蔽了很多实现细节。一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技 阅读全文

posted @ 2012-11-22 15:41 语行 阅读(779) 评论(3) 推荐(1) 编辑

2012年11月20日

摘要: 在linux上进行开发运维的时候,免不了要查看某一个程序所占用内存的情况。 这里总结几种方法: 1: top -p pid查看程序的情况 2: ps -aux | grep process_name 3: cat /proc/pid/status 这里会打印出当前进程详细的情况,其中, 内存是VmRSS 阅读全文

posted @ 2012-11-20 18:04 语行 阅读(887) 评论(0) 推荐(0) 编辑

2012年11月18日

摘要: 上两篇介绍了redis的启动流程接受客户端请求到调用请求处理函数,在这篇里,我将介绍redis事件触发细节,即epoll介绍。从redis源码可以看出,redis的io模型主要是基于epoll实现的,不过它也提供了 select和kqueue的实现,默认采用epoll。ae.c#ifdef HAVE_EPOLL#include "ae_epoll.c"#else #ifdef HAVE_KQUEUE #include "ae_kqueue.c" #else #include "ae_select.c" #endif#endif通过这么 阅读全文

posted @ 2012-11-18 16:25 语行 阅读(9564) 评论(0) 推荐(2) 编辑

2012年11月17日

摘要: 最近在基于redis的c客户端hiredis做扩展的时候, 其中一个函数需要接受一个const char **的二级指针作为参数: void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen);这个函数主要是用于 需要传递多个string值的场景,类似于 lpush, del key1 key2..., zadd key score1 member1 score2 member2...这类命令, 其中 argc是传递参数的个数, argv主要用于传递的string的v... 阅读全文

posted @ 2012-11-17 14:07 语行 阅读(4648) 评论(3) 推荐(1) 编辑

摘要: 上篇概括了redis的启动流程,这篇重点介绍redis如何接受客户端请求并调用处理函数来执行命令。在上一篇里,说到了在initServer()这个函数里边,会调用anetTcpServer和anetUnixServer 这两个函数创建对tcp端口和unix域套接字的监听,那么这里首先重点分析下这两个函数的具体实现。int anetTcpServer(char *err, int port, char *bindaddr){ int s; struct sockaddr_in sa; if ((s = anetCreateSocket(err,AF_INET)) == ANET... 阅读全文

posted @ 2012-11-17 13:17 语行 阅读(4130) 评论(0) 推荐(0) 编辑