| Profilo di ChaosConstLatest news from ChaosCo...BlogElenchi | Guida |
|
31 marzo 袁行远要努力不放弃!商业实用技术,不过我做的就要做得最好:3月30日,普加搜索自动提示上线。
14 marzo Unicode(UTF8)中日韩统一汉字(U+4E00–U+9FBF)判断程序 还是工程应用的文章,utf8 3位汉字编码,至少在中日韩统一汉字中是这样,但怎么判断一个长度为3的string是不是汉字呢? 答案一:U+4E00–U+9FBF 答案二:访问www.unicode.org 答案三:参考这篇文章。 答案四:下面这段代码 int is_utf8_zh_basic(const char * str) { if (strlen(str)<3) return 0; /*basic check if str is 1110xxxx 10xxxxxx 10xxxxxx*/ if ((str[0]+256)/16!=14) return 0; if ((str[1]+256)/64!=2) return 0; if ((str[2]+256)/64!=2) return 0; int code=(((str[0]+256)%16)*64*64+((str[1]+256)%64)*64+(str[2]+256)%64); if ((code>=0x4E00)&&(code<=0x9FbF)) return 1; else return 0; } 统计扫描百兆以上级数据时常常遇到匪夷所思的字符,用这个过滤一下吧。 13 marzo memcached简单的使用教程这是工程应用性质的文章:memcached是数据快速存取的工具,wikipedia和facebook就用了它提高速度。具体情况可以wiki. c/c++里面使用memcached本来是很简单的事情,但就是没有人说,非要我去读libmemcache的实例代码才行,manpage也没有说清楚(但还不得不看)。如果要使用memcached,步骤如下: 1 安装memcached 你可以去官网上下载,也可以sudo apt-get install memcached 2 测试你刚才的安装, 比如运行 memcached -d -m 64 -l 127.0.0.1 -p 12300 -d表示后台, -m 64表示使用64MB内存,-l 127.0.0.1 -p 12300 表示监听127.0.0.1:12300端口 没有任何消息就是运行成功 3 安装libmemcached 这个就不要apt了,因为没有精确的libmemcached包,乖乖去官网下载吧。这个东西还需要libevent,这个没法apt,libevent安装的时候最好装到/usr/lib里面,不然libmemcached还不能运行。 4 测试libmemcached 找一个文件比如test,然后运行memcp test --servers=127.0.0.1:12300 这样就把test拷贝到memcached管理的内存里面了。 memcat test --servers=127.0.0.1:12300 看看是不是刚才的那个文件。 该装的全装了,我们可以改代码了。 (以下引自:wikipedia) 将纯粹使用数据库查询的程式码加上memcached支援是很简单的,假设这是原来的程式码: function get_foo (int userid) {
加上memcached的快取机制后: function get_foo (int userid) {但我们需要初始化,而且需要c/c++的表述形式:首先修改makefile,在LIBS里面加上-lmemcached,比如原来 gcc test.c,现在 gcc test.c -lmemcached。这个库就是libmemcached提供的。 然后添加#include<libmemcached/memcached.h>,这个文件也是libmemcached提供的。 主函数里面需要添加: memcached_st *memc; uint32_t flags; memcached_return rc; memcached_server_st *servers; memc= memcached_create(NULL); servers= memcached_servers_parse("127.0.0.1:12300"); memcached_server_push(memc, servers); memcached_server_list_free(servers); memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 0); 这就是初始化的全部代码,可以设置很多东西,不过我现在只要一个服务器,就看一句话: servers= memcached_servers_parse("127.0.0.1:12300"); 这就是指明要连接到位于127.0.0.1监听12300端口的memcached程序. 其他都不管。 我最后用一段修改后的代码介绍两个函数,memcached_get和memcached_set,都可以man出来。 char * result_str; /*这个就是查询的结果*/ std::string query="要查询的数据名"; result_str= memcached_get(memc, query.c_str(), strlen(query.c_str()), &result_str_length, &flags, &rc); if (rc == MEMCACHED_SUCCESS) { printf("%s",result_str); free(result_str); /*一定要free掉 memcached传回的数据*/ continue; } else if (rc == MEMCACHED_NOTFOUND) { /*读取数据*/ ... rc= memcached_set(memc, query.c_str(), strlen(query.c_str()), str_result.c_str(), strlen(str_result.c_str()), 0, 0); } 这东西设计得还是很好用的,libmemcached好像是面向对象c语言风格的东西,好不好用就让我们拭目以待吧。 |
|
|