Git Product home page Git Product logo

boltstore's Introduction

BoltStore - Session store using Bolt

wercker status Coverage Status GoDoc

Overview

BoltStore is a session store using Bolt which is a pure Go key/value store. You can store session data in Bolt by using this store. This store implements the gorilla/sessions package's Store interface. BoltStore's APIs and examples can be seen on its GoDoc page.

Installation

go get github.com/yosssi/boltstore/...

Example

Here is a simple example using BoltStore. You can see other examples on the BoltStore's GoDoc page.

package main

import (
	"fmt"
	"net/http"

	"github.com/boltdb/bolt"
	"github.com/gorilla/sessions"
	"github.com/yosssi/boltstore/reaper"
	"github.com/yosssi/boltstore/store"
)

var db *bolt.DB

func handler(w http.ResponseWriter, r *http.Request) {
	// Create a store.
	str, err := store.New(db, store.Config{}, []byte("secret-key"))
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}

	// Get a session.
	session, err := str.Get(r, "session-key")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}

	// Add a value on the session.
	session.Values["foo"] = "bar"

	// Save the session.
	if err := sessions.Save(r, w); err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}

	fmt.Fprintf(w, "Hello BoltStore")
}

func main() {
	var err error
	// Open a Bolt database.
	db, err = bolt.Open("./sessions.db", 0666, nil)
	if err != nil {
		panic(err)
	}
	defer db.Close()
	// Invoke a reaper which checks and removes expired sessions periodically.
	defer reaper.Quit(reaper.Run(db, reaper.Options{}))
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

Benchmarks

BenchmarkNew	    			5000	    316700 ns/op	   19003 B/op	      35 allocs/op
BenchmarkStore_Get			20000000	       104 ns/op	       0 B/op	       0 allocs/op
BenchmarkStore_New			10000000	       294 ns/op	     130 B/op	       2 allocs/op
BenchmarkStore_Save	    		5000	    488683 ns/op	   65484 B/op	     136 allocs/op
BenchmarkStore_Save_delete	    5000	    476563 ns/op	   59576 B/op	      76 allocs/op

Documentation

boltstore's People

Contributors

mjdsys avatar r0l1 avatar yosssi avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.