8月 16

go 操作redis ,对比python 操作redis

  之前做过python入库到redis的测试 http://www.simonzhang.net/?p=430
  今天才发现由于页面生成问题,有部分代码被转译了。借这个机会在同一台机器上再测试一下这两种语言。

  测试服务器为一个Xeon(TM)双核3.20GHz 的cpu,内存4G。操作系统为Centos5.4 64位。go1.0.2,python2.6

  go环境和redis之前已经有记录,go语言的redis开发包安装也比较简单,但是官方文档中目录有写错。
  我的go放在/usr/local/go,我的安装记录如下:
cd /usr/local/go/src/pkg
git clone git://github.com/alphazero/Go-Redis.git redis
cd redis
go install

仍旧用大密码表实验,go语言代码如下:

//www.simonzhang.net
package main 

import (
	"os";
	"log";
	"fmt";
	"redis";
        "encoding/hex"
        "crypto/md5"
)

func main () {
	spec := redis.DefaultSpec().Db(1).Password("");
        //如要操作远程redis服务器连接如下
	//spec := redis.DefaultSpec().Host("192.168.1.200").Db(1).Password("123");
	client, e := redis.NewSynchClientWithSpec (spec);
	if e != nil { log.Println ("failed to create the client", e); return }
        var str string
        userFile := "big_pass.txt"
        fin,err := os.Open(userFile)
        defer fin.Close()
        if err != nil {
                fmt.Println(userFile,err)
                return
        }
        buf := make([]byte, 1)
        for{
                n,_:= fin.Read(buf)
                if 0==n {break}
                if string(buf)=="\n"{
	            h:= md5.New()
   	            h.Write([]byte(str))
                    key:=hex.EncodeToString(h.Sum(nil));
                    value:=[]byte(str)
                    client.Set(key, value);
                    str=""
                 }else{
                    str+=string(buf)
                 }
                  
        }
}

开始测试

go使用build编译运行,cpu使用率在55%左右,load average: 1.98, 1.22, 0.91
real 1m33.310s
user 0m42.586s
sys 0m34.567s

python cpu使用在在80%,load average: 2.19, 1.36, 0.86。
real 1m26.873s
user 0m56.316s
sys 0m19.595s

  总结python写redis的东西比较简单。go对字符串做了MD5,入redis时用MD5值做key。
a)都运行完毕python和go录入redis行数与文本行数相同。
b)从大小来看python不到1K,go编译完成2.3M。如果要一处编译,移到其他服务器运行,go编译完的可以直接运行,python还要再装环境。但是有easy_install,所以装环境对我来说比较简单。
c) cpu使用量来看go要比python好一些,在增加md5计算的情况下所用系统资源也比pyhton少,但是应该快不了一倍。
d) 从代码编写的逻辑和难易程度来看,还是python简单一点。
如果要考虑速度可以试试Cpython,我没有试过。

8月 15

读《商业的常识》

书中对中国创业圈的事情说的比较实在。所发生的故事我也亲身感受过一部分。
阅读此书不会像大家看乔、盖、马的自传,看的热血沸腾,动不动就拿某句话作为作用名和方针照做。良药苦口,让大家感受到事情真实的一面。
企业中出现的问题各式各样,企业家的解决方式各有所长,但是本书并未对问题解决方案做过多的描述。
十分推荐大家读读。
image

8月 08

go语言环境准备

开始使用的是编译好的包,由于CentOS系统64位的版本过老,编译总是报错,所以最后还是使用源码编译。具体操作非常简单。
先安装需要的工具,如果已有就不用安装了。
# yum install mercurial bison gcc libc6-dev ed gawk make
解压源码包,执行编译命令,配置环境变量即可。
我使用root用户,将源码包直接放在/usr/local/目录下。操作记录如下
# tar zxvf go1.0.2.src.tar.gz
# cd go/src/
# ./all.bash
到用户的home目录里编译.bash_profile,如果要所有用户都能用,就直接编辑/etc/profile。
export GOROOT=/usr/local/go
export GOARCH=amd64
export GOOS=linux

PATH=$PATH:$HOME/bin:/usr/local/go/bin

到此已经可以用了,随便搞个hello world试试。
/etc/profile配置
export GOROOT=/usr/local/go
export GOBIN=/usr/local/go/bin
export GOARCH=amd64
export GOOS=linux
export PATH=$GOBIN:$PATH

8月 03

倒霉的奥运冠军

  我不看奥运会,因为我看到了过去的一些失败运动员和部分金牌运动员的悲惨生活。奥运精神应该是全民健身,是在美好生活上的附加品。现在很多运动员从小就变成了夺金的机器,没有学会其它的生存技能。可悲呀!一百分的汗水加上之后不幸的生活,去换一瞬的荣耀,这是变态的运动。但是今天一个倒霉运动员的新闻倒是让我很感兴趣。
倒霉的奥运冠军
  “射击选手吉姆·罗德在奥运会资格赛的前一晚,枪从车中被盗,第二天的比赛,她不得不使用当地社区捐赠给她的枪来进行比赛。在比赛过程中,航班未能准时前往丹麦的训练基地,后来她的小狗吃了她的机票”。
  枪丢了,使用了社区捐赠的?让我想起小学课本里许海峰的枪的来源。当前看来这枪既没有各种精神、也没有高深的信仰、也没有寄托全美人民的什么东西。也不知道这枪的捐赠有没有搞个大型的仪式,枪用红绸包裹着抬出来,并喊出“让领导先走”的口号。
  机票竟然被小狗吃了,这也太搞笑了。我小时候,也许是小时后,参加高考,为了避免准考证丢失,所有同学的准考证都要班主任拿着,等到了考场再统一发放。都快二十的人了,连个拿证的责任都不能负,我真觉得有点悲哀。好像我们都是为了做大事而来,日常小事都有“仆人”去做,但是让我郁闷的是只要我失败了,“仆人”们消失的无影无踪,就好像昨天是一场梦。我能确定不是梦,因为我真的失去了生活自理能力。我真想问问吉姆·罗德,如果不做射击运动员了,你还会做什么,还能靠什么为生?希望不是去盗窃或卖掉金牌讨生活。
  拿着大家的钱买金子贴自己的脸,发现买的金珀不纯时,当废纸扔掉,不会顾及是否还有价值。欣喜的看到有些被扔掉的金箔最后还是靠自己在别人家里发光了。发现自己看走了眼的解决方法是,告诉所有人我们好不容易练出来的金子不顾廉耻的飘到别人家了,浪费了大家的钱,即使他还是金子,但是已经没有了价值,因为他丢了什么东西。
  有了生活,再把运动作为一种附加的快乐,我认为那才是奥运会,才能值得去看\去学习\去参与。