DHDB is a high performace key-value(key-string, List-keys) NoSQL database, an alternative to Redis.
- Pure Go
- Big data list to 10 billion
- Redis all clients are supported
- Persistent queue service
- Android or OpenWrt os supported (ARM/MIPS)
Download dhdb from here (Windows,Mac,Linux,Android,OpenWrt)
- flags
- p -- dhdb server host port number (default 6380)
- a -- dhdb client auth password (default icoolpy.com)
- Connection (complete)
- AUTH -- see RequireAuth()
- ECHO
- PING
- SELECT
- QUIT
- Key
- DEL
- EXISTS
- KEYS
- SCAN
- String keys (complete)
- APPEND
- GET
- INCR
- SET
- RENAME
- List keys (complete)
- LPOP
- RPUSH
- Key
- KEYSSTART
- KEYSRANGE
import (
"github.com/garyburd/redigo/redis"
"fmt"
)
var RedisClient *redis.Pool
func main() {
RedisClient = &redis.Pool{
MaxIdle: 5,
MaxActive: 5,
IdleTimeout: 180 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", "127.0.0.1:6380")
if err != nil {
return nil, err
}
_, err = c.Do("AUTH", "icoolpy.com")
fmt.Println(err)
return c, nil
},
}
}
c := RedisClient.Get()
_, err := c.Do("SET", "foo", "bar","joo", "bar")
if v, err := redis.String(c.Do("GET", "foo")); err == nil {
fmt.Println(v)
}
// find all keys start with 'j' word
v, err := redis.Strings(c.Do("KEYS", "j*"));
if err != nil || v[0] != "joo" {
fmt.Println("Keys not fire *")
}
v, err := redis.Strings(c.Do("KEYSSTART", "jo"));
if err == nil {
fmt.Println("KEYSSTART")
for _, val := range v {
fmt.Println(val)
}
}
//gen data
tm, _ := time.Parse(time.RFC3339Nano, "2017-01-09T14:10:43.678Z")
for i := 0; i < 10; i++ {
key := tm.Add(time.Second * time.Duration(i))
nkey := key.Format(time.RFC3339Nano)
var nb []byte
for _, r := range "1,2," {
nb = append(nb, byte(r))
}
for _, r := range nkey {
nb = append(nb, byte(r))
}
_, err = c.Do("SET", string(nb), "")
}
//sreach range keys
v, _ := redis.Strings(c.Do("KEYSRANGE", "1,2,2017-01-09T14:10:41", "1,2,2017-01-09T14:11:46"))
for _, val := range v {
fmt.Println(val)
}
if _, err = redis.String(c.Do("SELECT", "5")); err != nil {
fmt.Println(err)
}
//change new list for queue by select command
_, _ = redis.String(c.Do("SELECT", "15"));
myv, _ := redis.Int(c.Do("RPUSH", "foo2","bar3"));
fmt.Println(myv)//print finish count
//change new list for queue by select command
_, _ = redis.String(c.Do("SELECT", "15"));
for i := 0; i < 3; i++ {
av, err := redis.String(c.Do("LPOP"));
if err !=nil{
fmt.Println(err)// EOF Queue
break;
}
fmt.Println("pop finish", i)
fmt.Println(av)//print pop value
}
@jacoblai
- syndtr, github.com/syndtr/goleveldb
- bsm, github.com/bsm/redeo