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  }