Go语言数据科学-将内存中的数据缓存到本地

package main

// 将内存中的数据备份到本地,方便程序退出后仍然能够访问数据
import (
	"fmt"
	"log"

	"github.com/boltdb/bolt"
)

func main() {
	db, err := bolt.Open("my.db", 0600, nil)
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 创建表
	err = db.Update(func(tx *bolt.Tx) error {
		// 判断要创建的mytable是否存在
		b := tx.Bucket([]byte("mytable"))
		if b == nil {
			// 创建叫 mytable的表
			_, err := tx.CreateBucket([]byte("mytable"))
			if err != nil {
				log.Fatal(err)
			}
		}
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}

	// 更新表数据
	// 假设计算机内存中已经存在一个字符串的映射,这个映射需要被缓存到boltdb中
	err = db.Update(func(tx *bolt.Tx) error {
		// 取出名叫"mytable"的表
		b := tx.Bucket([]byte("mytable"))
		if b != nil {
			err := b.Put([]byte("1"), []byte("0x0000"))
			if err != nil {
				log.Fatal(err)
			}
			err2 := b.Put([]byte("2"), []byte("0x0001"))
			if err != nil {
				log.Fatal(err2)
			}
		}
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}

	// 查询表数据
	err = db.Update(func(tx *bolt.Tx) error {
		// 取出名为mytable的表
		b := tx.Bucket([]byte("mytable"))
		// 往表里存储数据
		if b != nil {
			data1 := b.Get([]byte("1"))
			fmt.Printf("%s\n", data1)
			data2 := b.Get([]byte("2"))
			fmt.Printf("%s\n", data2)
		}
		// 返回nil
		return nil
	})
	if err!= nil{
		log.Fatal(err)
	}
}

posted @ 2021-08-18 17:36  MRWH7  阅读(288)  评论(0)    收藏  举报