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 }