• redcon, Redis兼容的服务器框架


    redcon源代码下载

    • Git URL:
      git://www.github.com/tidwall/redcon.git
    • Git Clone代码到本地:
      git clone http://www.github.com/tidwall/redcon
    • Subversion代码到本地:
      $ svn co --depth empty http://www.github.com/tidwall/redcon
      Checked out revision 1.
      $ cd repo
      $ svn up trunk
      
     

    REDCON
    Build StatusGoDoc

    快速Redis兼容服务器框架

    Redcon是一个定制的Redis服务器框架,使用速度快,易于使用。 它为服务器提供高效的服务器前端和Tile38插件项目的原因。

    特性

    安装

    
    go get -u github.com/tidwall/redcon
    
    
    

    示例

    下面是一个完整的Redis克隆示例,它接受:

    • 设置项值
    • 获取密钥
    • DEL键
    • PING
    • 退出

    你可以从终端运行这里示例:

    go run example/clone.go
    package mainimport (
     "log""strings""sync""github.com/tidwall/redcon")varaddr = ":6380"funcmain() {
     varmu sync.RWMutexvaritems = 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":
     iflen(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":
     iflen(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":
     iflen(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())returntrue },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)}}

    TLS示例

    Redcon通过 ListenAndServeTLS 函数提供完整的TLS支持。

    同样的示例也提供了通过TLS服务 Redcon。

    go run example/tls/clone.go

    基准测试

    Redis: 单个线程,无磁盘持久性。

    
    $ redis-server --port 6379 --appendonly no
    
    redis-benchmark -p 6379 -t set,get -n 10000000 -q -P 512 -c 512
    
    
    SET: 941265.12 requests per second
    
    
    GET: 1189909.50 requests per second
    
    
    

    Redcon: 单线程,无磁盘持久性。

    
    $ GOMAXPROCS=1 go run example/clone.go
    
    
    
    
    redis-benchmark -p 6380 -t set,get -n 10000000 -q -P 512 -c 512
    
    
    SET: 2018570.88 requests per second
    
    
    GET: 2403846.25 requests per second
    
    
    

    Redcon: 多线程,无磁盘持久性。

    
    $ GOMAXPROCS=0 go run example/clone.go
    
    
    
    
    $ redis-benchmark -p 6380 -t set,get -n 10000000 -q -P 512 -c 512
    
    
    SET: 1944390.38 requests per second
    
    
    GET: 3993610.25 requests per second
    
    
    

    在a 上运行"Intel Intel Intel Intel Intel

    联系人

    @tidwall。

    许可证

    Redcon源代码在 MIT 许可协议下可用。

  • 相关阅读:
    vhdl 语法总结 4
    模拟地数字地连接以及0欧电阻作用
    vhdl 语法总结5
    电容参数X5R,X7R,Y5V等代表什么意思呢?(转)
    传智播客视频资料
    out.println 和<%=%>两种不同输出的形式
    易忘记的java名词
    JavaScript和JSP运用上的区别
    多线程 Time和TimeTask组合
    马路上的井盖为什么是圆的?(微软面试题)
  • 原文地址:https://www.cnblogs.com/ExMan/p/11836107.html
Copyright © 2020-2023  润新知