zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

redcon, Redis兼容的服务器框架

2023-09-14 09:12:24 时间

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 许可协议下可用。