Last active
March 4, 2018 02:25
-
-
Save marshyon/92f7927721be476dfcaec255b73ca0fb to your computer and use it in GitHub Desktop.
Golang boltdb usage - store and retrieve key value pairs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"log" | |
"time" | |
"github.com/boltdb/bolt" | |
) | |
var ( | |
db *bolt.DB | |
) | |
func init() { | |
var err error | |
// Open the my.db data file in the current directory. | |
// It will be created if it doesn't exist. | |
db, err = bolt.Open("my.db", 0600, &bolt.Options{Timeout: 1 * time.Second}) | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
func main() { | |
defer db.Close() | |
bucketName := []byte("authCacheDB") | |
key := []byte("nobody") | |
value, length := queryDB(bucketName, key) | |
fmt.Printf("---->%s [%d]\n", string(value), length) | |
if string(value) == "" { | |
fmt.Println("blanko") | |
} | |
fmt.Printf("key [%s] => [%#v]\n", key, value) | |
key = []byte("jon") | |
value = []byte("1484083883") | |
updateDB(bucketName, key, value) | |
value, length = queryDB(bucketName, key) | |
fmt.Printf("key [%s] => [%s][%d]\n", key, value, length) | |
key = []byte("joe") | |
value = []byte("1484083895") | |
updateDB(bucketName, key, value) | |
value, length = queryDB(bucketName, key) | |
fmt.Printf("key [%s] => [%s][%d]\n", key, value, length) | |
key = []byte("arkrite") | |
value = []byte("1484083901") | |
updateDB(bucketName, key, value) | |
value, length = queryDB(bucketName, key) | |
fmt.Printf("key [%s] => [%s] [%d]\n", key, value, length) | |
deleteKey(bucketName, []byte("arkrite")) | |
deleteKey(bucketName, []byte("jon")) | |
//key = []byte("nada") | |
//value = queryDB(bucketName, key) | |
//fmt.Printf("key [%s] => [%s]\n", key, value) | |
iterateDB(bucketName) | |
} | |
// updateDB : store data | |
func updateDB(bucketName, key, value []byte) { | |
err := db.Update(func(tx *bolt.Tx) error { | |
bkt, err := tx.CreateBucketIfNotExists(bucketName) | |
if err != nil { | |
return err | |
} | |
err = bkt.Put(key, value) | |
if err != nil { | |
return err | |
} | |
return nil | |
}) | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
// queryDB : retrieve data | |
func queryDB(bucketName, key []byte) (val []byte, length int) { | |
err := db.View(func(tx *bolt.Tx) error { | |
bkt := tx.Bucket(bucketName) | |
if bkt == nil { | |
return fmt.Errorf("Bucket %q not found!", bucketName) | |
} | |
val = bkt.Get(key) | |
return nil | |
}) | |
if err != nil { | |
log.Fatal(err) | |
} | |
return val, len(string(val)) | |
} | |
// iterateDB : iterate data | |
func iterateDB(bucketName []byte) { | |
err := db.View(func(tx *bolt.Tx) error { | |
b := tx.Bucket(bucketName) | |
c := b.Cursor() | |
for k, v := c.First(); k != nil; k, v = c.Next() { | |
fmt.Printf("key=>[%s], value=[%s]\n", k, v) | |
} | |
return nil | |
}) | |
if err != nil { | |
log.Fatalf("failure : %s\n", err) | |
} | |
} | |
// deleteKey : delete data | |
func deleteKey(bucketName, keyName []byte) { | |
err := db.Update(func(tx *bolt.Tx) error { | |
b := tx.Bucket(bucketName) | |
err := b.Delete(keyName) | |
return err | |
}) | |
if err != nil { | |
log.Fatalf("failure : %s\n", err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment