Merge branch 'develop'

This commit is contained in:
siddontang 2014-06-12 15:59:50 +08:00
commit 6120d3a8c2
4 changed files with 85 additions and 19 deletions

View File

@ -33,16 +33,46 @@ Ledisdb is a high performance nosql like redis based on leveldb written by go. I
./ledis-server -config=/etc/ledis.json ./ledis-server -config=/etc/ledis.json
//another shell
redis-cli -p 6380
redis 127.0.0.1:6380> set a 1
OK
redis 127.0.0.1:6380> get a
"1"
## Lib
import "github.com/siddontang/ledisdb/ledis"
l, _ := ledis.OpenWithConfig(cfg)
db, _ := l.Select(0)
db.Set(key, value)
db.Get(key)
## Replication
set slaveof in config or dynamiclly
redis-cli -p 6381
redis 127.0.0.1:6381> slaveof 127.0.0.1:6380
OK
## Benchmark ## Benchmark
See benchmark.md for more. See benchmark.md for more.
## Todo ## Todo
+ Expire + TTL
+ Replication
+ Admin + Admin
## Thanks
Gamil: cenqichao@gmail.com
## Feedback ## Feedback
Gmail: siddontang@gmail.com Gmail: siddontang@gmail.com

View File

@ -40,16 +40,45 @@ ledisdb是一个用go实现的类似redis的高性能nosql数据库底层基
./ledis-server -config=/etc/ledis.json ./ledis-server -config=/etc/ledis.json
//another shell
redis-cli -p 6380
redis 127.0.0.1:6380> set a 1
OK
redis 127.0.0.1:6380> get a
"1"
## 嵌入库
import "github.com/siddontang/ledisdb/ledis"
l, _ := ledis.OpenWithConfig(cfg)
db, _ := l.Select(0)
db.Set(key, value)
db.Get(key)
## Benchmark ## Benchmark
可以通过查看benchmark.md获取最新的性能测试结果 可以通过查看benchmark.md获取最新的性能测试结果
## Replication
通过配置或者运行时输入slaveof开启slave的replication功能
redis-cli -p 6381
redis 127.0.0.1:6381> slaveof 127.0.0.1:6380
OK
## Todo ## Todo
+ Expire + TTL
+ Replication
+ Admin + Admin
## 感谢
Gamil: cenqichao@gmail.com
## 联系我 ## 联系我
Gmail: siddontang@gmail.com Gmail: siddontang@gmail.com

View File

@ -1,9 +1,7 @@
package server package server
import ( import (
"fmt"
"github.com/siddontang/go-log/log" "github.com/siddontang/go-log/log"
"strings"
) )
const ( const (
@ -31,21 +29,13 @@ func (l *accessLog) Close() {
l.l.Close() l.l.Close()
} }
func (l *accessLog) Log(remoteAddr string, usedTime int64, cmd string, args [][]byte, err error) { func (l *accessLog) Log(remoteAddr string, usedTime int64, request []byte, err error) {
argsFormat := make([]string, len(args))
argsI := make([]interface{}, len(args))
for i := range args {
argsFormat[i] = " %.24q"
argsI[i] = args[i]
}
argsStr := fmt.Sprintf(strings.Join(argsFormat, ""), argsI...) format := `%s %q %d [%s]`
format := `%s [%s%s] %d [%s]`
if err == nil { if err == nil {
l.l.Info(format, remoteAddr, cmd, argsStr, usedTime, "OK") l.l.Info(format, remoteAddr, request, usedTime, "OK")
} else { } else {
l.l.Info(format, remoteAddr, cmd, argsStr, usedTime, err.Error()) l.l.Info(format, remoteAddr, request, usedTime, err.Error())
} }
} }

View File

@ -32,6 +32,8 @@ type client struct {
reqC chan error reqC chan error
syncBuf bytes.Buffer syncBuf bytes.Buffer
logBuf bytes.Buffer
} }
func newClient(c net.Conn, app *App) { func newClient(c net.Conn, app *App) {
@ -158,7 +160,22 @@ func (c *client) handleRequest(req [][]byte) {
duration := time.Since(start) duration := time.Since(start)
if c.app.access != nil { if c.app.access != nil {
c.app.access.Log(c.c.RemoteAddr().String(), duration.Nanoseconds()/1000000, c.cmd, c.args, err) c.logBuf.Reset()
for i, r := range req {
left := 256 - c.logBuf.Len()
if left <= 0 {
break
} else if len(r) <= left {
c.logBuf.Write(r)
if i != len(req)-1 {
c.logBuf.WriteByte(' ')
}
} else {
c.logBuf.Write(r[0:left])
}
}
c.app.access.Log(c.c.RemoteAddr().String(), duration.Nanoseconds()/1000000, c.logBuf.Bytes(), err)
} }
if err != nil { if err != nil {