github.com/nutsdb/nutsdb@v1.0.4/examples/k-v/increments/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 call Incr, Decr, IncrBy and DecrBy on a key that does not exist, we will get an error with 'key not found' 48 incr("non-exist") 49 decr("non-exist") 50 incrBy("non-exist", 1) 51 decrBy("non-exist", 2) 52 53 // If we call Incr, Decr, IncrBy and DecrBy on key that exist but the corresponding value not an integer, we will get an error with 'value is not an integer' 54 put("key1", "value1") 55 incr("key1") 56 decr("key1") 57 incrBy("key1", 1) 58 decrBy("key1", 1) 59 60 put("key2", "12") 61 62 // Incr will increase the value by 1 63 incr("key2") 64 get("key2") // get value: 13 65 66 // Decr will decrease the value by 1 67 decr("key2") 68 get("key2") // get value: 12 69 70 // IncrBy will increase the value by given value 71 incrBy("key2", 2) 72 get("key2") // get value: 14 73 74 // DecrBy will decrease the value by given value 75 decrBy("key2", 2) 76 get("key2") // get value: 12 77 } 78 79 func get(key string) { 80 if err := db.View(func(tx *nutsdb.Tx) error { 81 value, err := tx.Get(bucket, []byte(key)) 82 if err != nil { 83 return err 84 } 85 log.Println("get value: ", value) 86 return nil 87 }); err != nil { 88 log.Println(err) 89 } 90 } 91 92 func put(key, value string) { 93 if err := db.Update(func(tx *nutsdb.Tx) error { 94 return tx.Put(bucket, []byte(key), []byte(value), nutsdb.Persistent) 95 }); err != nil { 96 log.Println(err) 97 } 98 } 99 100 func incr(key string) { 101 if err := db.Update(func(tx *nutsdb.Tx) error { 102 return tx.Incr(bucket, []byte(key)) 103 }); err != nil { 104 log.Println(err) 105 } 106 } 107 108 func decr(key string) { 109 if err := db.Update(func(tx *nutsdb.Tx) error { 110 return tx.Decr(bucket, []byte(key)) 111 }); err != nil { 112 log.Println(err) 113 } 114 } 115 116 func incrBy(key string, value int64) { 117 if err := db.Update(func(tx *nutsdb.Tx) error { 118 return tx.IncrBy(bucket, []byte(key), value) 119 }); err != nil { 120 log.Println(err) 121 } 122 } 123 124 func decrBy(key string, value int64) { 125 if err := db.Update(func(tx *nutsdb.Tx) error { 126 return tx.DecrBy(bucket, []byte(key), value) 127 }); err != nil { 128 log.Println(err) 129 } 130 }