Redco是一个采用Go开发的兼容Redis的Key/Value数据库。特点是简单、快速。
支持Redis的命令包括:
SETkeyvalue
GETkey
DELkey
PING
QUIT
示例代码:
package maiimport ( "log" "strigs" "syc" "github.com/tidwall/redco")var addr = ":6380"fuc mai() { var mu syc.RWMutex var items = make(map[strig][]byte) go log.Pritf("started server at %s", addr) err := redco.ListeAdServe(addr, fuc(co redco.Co, cmd redco.Commad) { switch strigs.ToLower(strig(cmd.Args[0])) { default: co.WriteError("ERR ukow commad '" + strig(cmd.Args[0]) + "'") case "pig": co.WriteStrig("PONG") case "quit": co.WriteStrig("OK") co.Close() case "set": if le(cmd.Args) != 3 { co.WriteError("ERR wrog umber of argumets for '" + strig(cmd.Args[0]) + "' commad") retur } mu.Lock() items[strig(cmd.Args[1])] = cmd.Args[2] mu.Ulock() co.WriteStrig("OK") case "get": if le(cmd.Args) != 2 { co.WriteError("ERR wrog umber of argumets for '" + strig(cmd.Args[0]) + "' commad") retur } mu.RLock() val, ok := items[strig(cmd.Args[1])] mu.RUlock() if !ok { co.WriteNull() } else { co.WriteBulk(val) } case "del": if le(cmd.Args) != 2 { co.WriteError("ERR wrog umber of argumets for '" + strig(cmd.Args[0]) + "' commad") retur } mu.Lock() _, ok := items[strig(cmd.Args[1])] delete(items, strig(cmd.Args[1])) mu.Ulock() if !ok { co.WriteIt(0) } else { co.WriteIt(1) } } }, fuc(co redco.Co) bool { // use this fuctio to accept or dey the coectio. // log.Pritf("accept: %s", co.RemoteAddr()) retur true }, fuc(co redco.Co, err error) { // this is called whe the coectio has bee closed // log.Pritf("closed: %s, err: %v", co.RemoteAddr(), err) }, ) if err != il { log.Fatal(err) }}









评论