您好,欢迎访问一九零五行业门户网

golang利用http模块构建redis读写查api

前沿: 这两天试着用golang做一些高性能的api,不想把压力到聚合在平台的接口上。平台因为要做很多耗时间的操作,uwsgi下会出现少许错误,找了一圈不知道如何解决该问题。 暂时先绕道而行,先拿简单的接口来做测试,慢慢的把复杂的操作也迁移到golang上。 话
前沿:
        这两天试着用golang做一些高性能的api,不想把压力到聚合在平台的接口上。平台因为要做很多耗时间的操作,uwsgi下会出现少许错误,找了一圈不知道如何解决该问题。 暂时先绕道而行,先拿简单的接口来做测试,慢慢的把复杂的操作也迁移到golang上。
          话说以前高性能的接口,我用的最多的方案还是nginx lua的组合,超强,大家可以看看我以前写的nginx lua的文章,各方面没得说。只是这段时间正在看golang 的,就试着用golang实现redis的api,先来个简单的试试手。
先搞下golang的redis模块
cd $gopath/srcgit clone git://github.com/alphazero/go-redis.git rediscd redisgo install
简单说下golang操作redis的例子
//xiaorui.ccpackage mainimport ( os; bufio; log; fmt; redis;)/* hello world, redis style.*/func main () { // create the client. here we are using a synchronous client. // using the default connectionspec, we are specifying the client to connect // to db 13 (e.g. select 13), and a password of go-redis (e.g. auth go-redis) spec := redis.defaultspec().db(13).password(go-redis); client, e := redis.newsynchclientwithspec (spec); if e != nil { log.println (failed to create the client, e); return } key := examples/hello/user.name; value, e := client.get(key); if e!= nil { log.println (error on get, e); return } if value == nil { fmt.printf(\nhello, don't believe we've met before!\nyour name? ); reader:= bufio.newreader(os.stdin); user, _ := reader.readstring(byte('\n')); if len(user) > 1 { user = user[0:len(user)-1]; value = []byte(user); client.set(key, value); } else { fmt.printf (vafanculo!\n); return; } } fmt.printf (hey, ciao %s!\n, fmt.sprintf(%s, value));}
我写的实例,大家看懂了后,完全可以做更多的扩展。
其实golang自带的http很有mvc的感觉,三者做了一些分离,很像python里面的web.py tornado。。。
测试结果:
服务端的启动
客户端的测试
//xiaorui.ccpackage mainimport( fmt net/http io/ioutil log time redis)//xiaorui.ccconst addform = `name: age: `const setform = `key: value: `func handler( w http.responsewriter,r *http.request ){ path := r.url.path[1:] if path == favicon.ico { http.notfound(w, r) return } if path == { path = index.html } contents,err:= ioutil.readfile( path ) if err !=nil{ fmt.fprintf( w,404 ) return } fmt.fprintf( w,%s\n,contents )}func add( w http.responsewriter,r *http.request ){ name := r.formvalue(name) age := r.formvalue(age) if name == || age == { fmt.fprint(w, addform) return } fmt.fprintf(w, save : your name is %s , you age is %s,name,age)}func redisset( w http.responsewriter,r *http.request ){ key := r.formvalue(key) value := r.formvalue(value) if key == || value == { fmt.fprint(w, setform) return } spec := redis.defaultspec().db(0).password(); client, e := redis.newsynchclientwithspec (spec); if e != nil { log.println (服务器连接有异常, e); return } inva := []byte(value) client.set(key, inva); fmt.fprintf(w, 哥们,你输入的key %s 和value %s 已经插入到redis里面了,key,key)}func redisget( w http.responsewriter,r *http.request ){ key := r.formvalue(key) if key == { fmt.fprint(w, setform) return } spec := redis.defaultspec().db(0).password(); client, e := redis.newsynchclientwithspec (spec); if e != nil { log.println (服务器连接有异常, e); return } value, e := client.get(key); fmt.fprintf(w, 哥们,你要查询的key %s 和value %s ,key,value)}func valueget(w http.responsewriter, r *http.request) { params := r.url.query() user := params.get(user) fmt.fprintf(w, you are get user %s, user)}func main(){ http.handlefunc( /,handler) http.handlefunc( /add,add) http.handlefunc( /redisset,redisset) http.handlefunc( /redisget,redisget) http.handlefunc( /valueget,valueget) s := &http.server{ addr: :80, readtimeout: 30 * time.second, writetimeout: 30 * time.second, maxheaderbytes: 1
原文地址:golang利用http模块构建redis读写查api, 感谢原作者分享。

其它类似信息

推荐信息