Skip to content

Commit 52ae4ce

Browse files
committed
**GoRedis 1.0.69** @2014.4.10
* [Fix] 修正PrefixEnumerate时全部遍历没有quit * [ADD] 启动参数新增logpath、datapath用于自定义数据和Log路径
1 parent a235b44 commit 52ae4ce

File tree

3 files changed

+42
-20
lines changed

3 files changed

+42
-20
lines changed

doc/release notes.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ GoRedis release notes
55

66
* [Feature] 实现基本功能
77

8+
9+
**GoRedis 1.0.69** @2014.4.10
10+
* [Fix] 修正PrefixEnumerate时全部遍历没有quit
11+
* [ADD] 启动参数新增logpath、datapath用于自定义数据和Log路径
12+
13+
814
**GoRedis 1.0.68** @2014.3.30
915

1016
* [Fix] 修正SADD返回值

libs/levelredis/level_redis.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,12 +376,22 @@ func (l *LevelRedis) Keys(prefix []byte, fn func(i int, key, keytype []byte, qui
376376
// 前缀扫描
377377
func (l *LevelRedis) PrefixEnumerate(prefix []byte, direction IterDirection, fn func(i int, key, value []byte, quit *bool)) {
378378
min := prefix
379+
/**
380+
*
381+
*/
379382
max := append(prefix, MAXBYTE)
380383
j := -1
381384
l.RangeEnumerate(min, max, direction, func(i int, key, value []byte, quit *bool) {
382385
if bytes.HasPrefix(key, prefix) {
383386
j++
384387
fn(j, key, value, quit)
388+
} else {
389+
/**
390+
* 根据leveldb 的 key有序,因此具有相同前缀的key必定是在一起的
391+
* 所以一旦碰见了没有该前缀的key那么就直接退出,结束遍历
392+
*/
393+
394+
*quit = true
385395
}
386396
})
387397
return

main/goredis-server.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ func main() {
2828
slaveof := flag.String("slaveof", "", "replication")
2929
procs := flag.Int("procs", 8, "GOMAXPROCS")
3030
repair := flag.Bool("repair", false, "repaire rocksdb")
31-
logpath := flag.String("logpath", "/home/data", "config goredis log path and synclog path")
31+
datapath := flag.String("datapath", "/data", "config goredis data path default path [/data/goredis_${port}/]")
32+
logpath := flag.String("logpath", "/home/logs/", "config goredis log path and synclog path ,default path [/home/logs/goredis_${port}]")
3233
flag.Parse()
3334

3435
if *version {
@@ -40,7 +41,7 @@ func main() {
4041

4142
opt := goredis_server.NewOptions()
4243
opt.SetBind(fmt.Sprintf("%s:%d", *host, *port))
43-
dbhome := dbHome(*port)
44+
dbhome := dbHome(*datapath, *port)
4445
opt.SetDirectory(dbhome)
4546

4647
if len(*slaveof) > 0 {
@@ -52,7 +53,9 @@ func main() {
5253
}
5354

5455
// 重定向日志输出位置
55-
opt.SetLogDir(redirectLogOutput(*logpath, *port, dbhome))
56+
logdir := redirectLogOutput(*logpath, *port)
57+
opt.SetLogDir(logdir)
58+
stdlog.Println("logdir:[" + logdir + "]\tdbhome:[" + dbhome + "]")
5659

5760
// repair
5861
if *repair {
@@ -87,37 +90,40 @@ func init() {
8790
})
8891
}
8992

90-
// 主路径,默认在/data下创建,否则在/tmp下
91-
func dbHome(port int) string {
92-
dbhome := "/data"
93-
finfo, e1 := os.Stat(dbhome)
94-
if os.IsNotExist(e1) || !finfo.IsDir() {
95-
dbhome = "/tmp"
93+
/**
94+
* 构建dbhome,使用datapath中的路径
95+
*/
96+
func dbHome(datapath string, port int) string {
97+
98+
dbhome := fmt.Sprintf("%s/goredis_%d/", datapath, port)
99+
100+
finfo, err := os.Stat(dbhome)
101+
if os.IsNotExist(err) || !finfo.IsDir() {
102+
os.MkdirAll(dbhome, os.ModePerm)
96103
}
97-
directory := fmt.Sprintf("%s/goredis_%d/", dbhome, port)
98-
os.MkdirAll(directory, os.ModePerm)
99-
return directory
104+
return dbhome
100105
}
101106

102107
/**
103108
* 将Stdout, Stderr重定向到指定文件
104109
* 并返回当前日志路径
105110
*/
106-
func redirectLogOutput(directory string, port int, defdir string) string {
111+
func redirectLogOutput(directory string, port int) string {
107112

108113
oldout := os.Stdout
109114

110-
logpath := directory
115+
logpath := fmt.Sprintf("%s/goredis_%d/", directory, port)
116+
117+
loginfo, err := os.Stat(logpath)
111118

112-
loginfo, err := os.Stat(directory)
113-
//如果没有就是用默认的即 dbhome
119+
/**
120+
* 如果logpath不存在
121+
* 则创建
122+
*/
114123
if os.IsNotExist(err) || !loginfo.IsDir() {
115-
directory = defdir
124+
os.MkdirAll(logpath, os.ModePerm)
116125
}
117126

118-
logpath = fmt.Sprintf("%s/logs/%d/", logpath, port)
119-
os.MkdirAll(logpath, os.ModePerm)
120-
121127
os.Stdout, err = os.OpenFile(logpath+"stdout.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.ModePerm)
122128

123129
if err != nil {

0 commit comments

Comments
 (0)