github.com/nutsdb/nutsdb@v1.0.4/examples/k-v/multioprations/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 // When we use tx.MSet, we must use even number of []byte as its parameters. 48 // When i is an even number, the no.i arg and the no.i+1 arg will be a pair of K-V. 49 // If there're odd number of args, it will throw an error 50 mSet([]byte("1")) // parameters is used to represent key value pairs and cannot be odd numbers 51 52 // Normally, we use tx.MSet and tx.MGet to do some multiple operations. 53 mSet([]byte("1"), []byte("one"), []byte("2"), []byte("two")) 54 // get value by MGet, the 0 value is: 'one' 55 // get value by MGet, the 1 value is: 'two' 56 mGet([]byte("1"), []byte("2")) 57 } 58 59 func mGet(key ...[]byte) { 60 if err := db.View(func(tx *nutsdb.Tx) error { 61 values, err := tx.MGet(bucket, key...) 62 if err != nil { 63 return err 64 } 65 for i, value := range values { 66 log.Printf("get value by MGet, the %d value is '%s'", i, string(value)) 67 } 68 return nil 69 }); err != nil { 70 log.Println(err) 71 } 72 } 73 74 func mSet(args ...[]byte) { 75 if err := db.Update(func(tx *nutsdb.Tx) error { 76 return tx.MSet(bucket, nutsdb.Persistent, args...) 77 }); err != nil { 78 log.Println(err) 79 } 80 }