Redcon 兼容 Redis 的 K/V 数据库开源项目

我要开发同款
匿名用户2017年10月06日
37阅读
开发技术GO语言
所属分类Google Go、NoSQL数据库、数据库相关
授权协议MIT

作品详情

Redcon是一个采用Go开发的兼容Redis的Key/Value数据库。特点是简单、快速。

支持Redis的命令包括:

SETkeyvalue

GETkey

DELkey

PING

QUIT

示例代码:

package mainimport (  "log"  "strings"  "sync"  "github.com/tidwall/redcon")var addr = ":6380"func main() {  var mu sync.RWMutex  var items = make(map[string][]byte)  go log.Printf("started server at %s", addr)  err := redcon.ListenAndServe(addr,    func(conn redcon.Conn, cmd redcon.Command) {      switch strings.ToLower(string(cmd.Args[0])) {      default:        conn.WriteError("ERR unknown command '" + string(cmd.Args[0]) + "'")      case "ping":        conn.WriteString("PONG")      case "quit":        conn.WriteString("OK")        conn.Close()      case "set":        if len(cmd.Args) != 3 {          conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")          return        }        mu.Lock()        items[string(cmd.Args[1])] = cmd.Args[2]        mu.Unlock()        conn.WriteString("OK")      case "get":        if len(cmd.Args) != 2 {          conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")          return        }        mu.RLock()        val, ok := items[string(cmd.Args[1])]        mu.RUnlock()        if !ok {          conn.WriteNull()        } else {          conn.WriteBulk(val)        }      case "del":        if len(cmd.Args) != 2 {          conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")          return        }        mu.Lock()        _, ok := items[string(cmd.Args[1])]        delete(items, string(cmd.Args[1]))        mu.Unlock()        if !ok {          conn.WriteInt(0)        } else {          conn.WriteInt(1)        }      }    },    func(conn redcon.Conn) bool {      // use this function to accept or deny the connection.      // log.Printf("accept: %s", conn.RemoteAddr())      return true    },    func(conn redcon.Conn, err error) {      // this is called when the connection has been closed      // log.Printf("closed: %s, err: %v", conn.RemoteAddr(), err)    },  )  if err != nil {    log.Fatal(err)  }}
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论