github.com/nutsdb/nutsdb@v1.0.4/examples/k-v/get_range/main.go (about) 1 package main 2 3 import ( 4 "github.com/nutsdb/nutsdb" 5 "io/ioutil" 6 "log" 7 "os" 8 ) 9 10 var ( 11 db *nutsdb.DB 12 bucket string 13 err error 14 ) 15 16 func init() { 17 fileDir := "/tmp/nutsdb_example" 18 19 files, _ := ioutil.ReadDir(fileDir) 20 for _, f := range files { 21 name := f.Name() 22 if name != "" { 23 err := os.RemoveAll(fileDir + "/" + name) 24 if err != nil { 25 panic(err) 26 } 27 } 28 } 29 db, _ = nutsdb.Open( 30 nutsdb.DefaultOptions, 31 nutsdb.WithDir(fileDir), 32 nutsdb.WithSegmentSize(1024*1024), // 1MB 33 ) 34 if err != nil { 35 panic(err) 36 } 37 bucket = "bucketForString" 38 39 if err := db.Update(func(tx *nutsdb.Tx) error { 40 return tx.NewBucket(nutsdb.DataStructureBTree, bucket) 41 }); err != nil { 42 log.Fatal(err) 43 } 44 } 45 46 func main() { 47 // If we use tx.GetRange on a non-exist key, it will throw an error about key not found 48 getRange("non-exist", 0, 0) // key not found 49 50 put("key", "This is a test value") 51 // If we use tx.GetRange with a pair of start and end which start is greater than end, it will throw an error. 52 getRange("key", 5, 3) // start is greater than end 53 // When start < end but start is greater than the size of value, it will return an empty value. 54 getRange("key", 100, 120) // got value: '' 55 // When start is less than the size of value, but end is greater. It will use value[start:] as its return. 56 getRange("key", 10, 100) // got value: 'test value' 57 // When end is less than the size of value. It will use value[start:end+1] as its return. This is same with Redis. 58 getRange("key", 10, 13) // got value: 'test' 59 } 60 61 func put(key, value string) { 62 if err := db.Update(func(tx *nutsdb.Tx) error { 63 return tx.Put(bucket, []byte(key), []byte(value), nutsdb.Persistent) 64 }); err != nil { 65 log.Println(err) 66 } 67 } 68 69 func getRange(key string, start, end int) { 70 if err := db.View(func(tx *nutsdb.Tx) error { 71 value, err := tx.GetRange(bucket, []byte(key), start, end) 72 if err != nil { 73 return err 74 } 75 log.Printf("got value: '%s'", string(value)) 76 return nil 77 }); err != nil { 78 log.Println(err) 79 } 80 }