github.com/nutsdb/nutsdb@v1.0.4/examples/list/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"log"
     7  	"os"
     8  
     9  	"github.com/nutsdb/nutsdb"
    10  )
    11  
    12  var (
    13  	db     *nutsdb.DB
    14  	bucket string
    15  	err    error
    16  )
    17  
    18  func init() {
    19  	fileDir := "/tmp/nutsdb_example"
    20  
    21  	files, _ := ioutil.ReadDir(fileDir)
    22  	for _, f := range files {
    23  		name := f.Name()
    24  		if name != "" {
    25  			err := os.RemoveAll(fileDir + "/" + name)
    26  			if err != nil {
    27  				panic(err)
    28  			}
    29  		}
    30  	}
    31  	db, _ = nutsdb.Open(
    32  		nutsdb.DefaultOptions,
    33  		nutsdb.WithDir(fileDir),
    34  		nutsdb.WithSegmentSize(1024*1024), // 1MB
    35  	)
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  	bucket = "bucketForList"
    40  }
    41  
    42  func main() {
    43  	testRPushAndLPush()
    44  
    45  	testLRange()
    46  
    47  	testLPop()
    48  
    49  	testRPop()
    50  
    51  	testRPushItems()
    52  
    53  	testLRem()
    54  
    55  	testLRange()
    56  
    57  	testLPeek()
    58  
    59  	testRPeek()
    60  
    61  	testLTrim()
    62  
    63  	testLRange()
    64  
    65  	testLSize()
    66  
    67  	testLRemByIndex()
    68  
    69  	testLKeys()
    70  }
    71  
    72  func testRPushAndLPush() {
    73  	fmt.Println("RPushAndLPush init data")
    74  	if err := db.Update(
    75  		func(tx *nutsdb.Tx) error {
    76  			key := []byte("myList")
    77  			val := []byte("val2")
    78  			return tx.RPush(bucket, key, val)
    79  		}); err != nil {
    80  		log.Fatal(err)
    81  	}
    82  
    83  	if err := db.Update(
    84  		func(tx *nutsdb.Tx) error {
    85  			key := []byte("myList")
    86  			val := []byte("val4")
    87  			return tx.RPush(bucket, key, val)
    88  		}); err != nil {
    89  		log.Fatal(err)
    90  	}
    91  
    92  	if err := db.Update(
    93  		func(tx *nutsdb.Tx) error {
    94  			key := []byte("myList")
    95  			val := []byte("val3")
    96  			return tx.RPush(bucket, key, val)
    97  		}); err != nil {
    98  		log.Fatal(err)
    99  	}
   100  	if err := db.Update(
   101  		func(tx *nutsdb.Tx) error {
   102  			key := []byte("myList")
   103  			val := []byte("val2")
   104  			return tx.RPush(bucket, key, val)
   105  		}); err != nil {
   106  		log.Fatal(err)
   107  	}
   108  
   109  	if err := db.Update(
   110  		func(tx *nutsdb.Tx) error {
   111  			key := []byte("myList")
   112  			val := []byte("val1")
   113  			return tx.LPush(bucket, key, val)
   114  		}); err != nil {
   115  		log.Fatal(err)
   116  	}
   117  }
   118  
   119  func testLRange() {
   120  	fmt.Println("LRange:")
   121  	if err := db.View(
   122  		func(tx *nutsdb.Tx) error {
   123  			key := []byte("myList")
   124  			items, err := tx.LRange(bucket, key, 0, -1)
   125  			if err != nil {
   126  				return err
   127  			}
   128  
   129  			for _, item := range items {
   130  				fmt.Println(string(item))
   131  			}
   132  			return nil
   133  		}); err != nil {
   134  		log.Fatal(err)
   135  	}
   136  }
   137  
   138  func testLPop() {
   139  	if err := db.Update(
   140  		func(tx *nutsdb.Tx) error {
   141  			key := []byte("myList")
   142  			item, err := tx.LPop(bucket, key)
   143  			if err != nil {
   144  				return err
   145  			}
   146  			fmt.Println("LPop item:", string(item)) // val1
   147  			return nil
   148  		}); err != nil {
   149  		log.Fatal(err)
   150  	}
   151  }
   152  
   153  func testRPop() {
   154  	if err := db.Update(
   155  		func(tx *nutsdb.Tx) error {
   156  			key := []byte("myList")
   157  			item, err := tx.RPop(bucket, key)
   158  			if err != nil {
   159  				return err
   160  			}
   161  			fmt.Println("RPop item:", string(item)) // val2
   162  			return nil
   163  		}); err != nil {
   164  		log.Fatal(err)
   165  	}
   166  }
   167  
   168  func testRPushItems() {
   169  	val1 := []byte("val1")
   170  	val2 := []byte("val2")
   171  	val3 := []byte("val3")
   172  	if err := db.Update(
   173  		func(tx *nutsdb.Tx) error {
   174  			key := []byte("myList")
   175  			return tx.RPush(bucket, key, val1)
   176  		}); err != nil {
   177  		log.Fatal(err)
   178  	}
   179  
   180  	if err := db.Update(
   181  		func(tx *nutsdb.Tx) error {
   182  			key := []byte("myList")
   183  			return tx.RPush(bucket, key, val2)
   184  		}); err != nil {
   185  		log.Fatal(err)
   186  	}
   187  	if err := db.Update(
   188  		func(tx *nutsdb.Tx) error {
   189  			key := []byte("myList")
   190  			return tx.RPush(bucket, key, val3)
   191  		}); err != nil {
   192  		log.Fatal(err)
   193  	}
   194  	if err := db.Update(
   195  		func(tx *nutsdb.Tx) error {
   196  			key := []byte("myList")
   197  			return tx.RPush(bucket, key, val2)
   198  		}); err != nil {
   199  		log.Fatal(err)
   200  	}
   201  
   202  	fmt.Println("RPushItems 4 items: ", string(val1), string(val2), string(val3), string(val2))
   203  }
   204  
   205  func testLRem() {
   206  	value := []byte("val2")
   207  	count := -1
   208  	// count := 1
   209  	if err := db.Update(
   210  		func(tx *nutsdb.Tx) error {
   211  			key := []byte("myList")
   212  			err := tx.LRem(bucket, key, count, value)
   213  			return err
   214  		}); err != nil {
   215  		log.Fatal(err)
   216  	}
   217  	if count < 0 {
   218  		count = -count
   219  	}
   220  	fmt.Println("LRem count : ", count, string(value))
   221  }
   222  
   223  func testLPeek() {
   224  	if err := db.View(
   225  		func(tx *nutsdb.Tx) error {
   226  			key := []byte("myList")
   227  			item, err := tx.LPeek(bucket, key)
   228  			if err != nil {
   229  				return err
   230  			}
   231  
   232  			fmt.Println("LPeek item:", string(item)) // val11
   233  			return nil
   234  		}); err != nil {
   235  		log.Fatal(err)
   236  	}
   237  }
   238  
   239  func testRPeek() {
   240  	if err := db.View(
   241  		func(tx *nutsdb.Tx) error {
   242  			key := []byte("myList")
   243  			item, err := tx.RPeek(bucket, key)
   244  			if err != nil {
   245  				return err
   246  			}
   247  
   248  			fmt.Println("RPeek item:", string(item)) // val2
   249  			return nil
   250  		}); err != nil {
   251  		log.Fatal(err)
   252  	}
   253  }
   254  
   255  func testLTrim() {
   256  	if err := db.Update(
   257  		func(tx *nutsdb.Tx) error {
   258  			key := []byte("myList")
   259  			return tx.LTrim(bucket, key, 0, 2)
   260  		}); err != nil {
   261  		log.Fatal(err)
   262  	}
   263  }
   264  
   265  func testLSize() {
   266  	if err := db.Update(
   267  		func(tx *nutsdb.Tx) error {
   268  			key := []byte("myList")
   269  			size, err := tx.LSize(bucket, key)
   270  			if err != nil {
   271  				return err
   272  			}
   273  
   274  			fmt.Println("myList size is ", size)
   275  			return nil
   276  		}); err != nil {
   277  		log.Fatal(err)
   278  	}
   279  }
   280  
   281  func testLRemByIndex() {
   282  	if err := db.Update(
   283  		func(tx *nutsdb.Tx) error {
   284  			key := []byte("myList")
   285  			err := tx.LRemByIndex(bucket, key, 0)
   286  			return err
   287  		}); err != nil {
   288  		log.Fatal(err)
   289  	}
   290  }
   291  
   292  func testLKeys() {
   293  	if err := db.View(
   294  		func(tx *nutsdb.Tx) error {
   295  			var keys []string
   296  			err := tx.LKeys(bucket, "*", func(key string) bool {
   297  				keys = append(keys, key)
   298  				// true: continue, false: break
   299  				return true
   300  			})
   301  			fmt.Printf("keys: %v\n", keys)
   302  			return err
   303  		}); err != nil {
   304  		log.Fatal(err)
   305  	}
   306  }