func (bcs *BCStore) Put(k string, v []byte) error {
	if err := bcs.s.Put([]byte(k), v); err != nil {
		return err
	}
	bcs.fireEventForKey(k, eventUpdate)
	return nil
}
Put stores the bytes of v at a location identitified by the key k.
If the operation fails an error will be returned explaining why.
package bitcask
import (
	"path"
	"path/filepath"
	"strings"
	"git.mills.io/prologic/bitcask"
	"github.com/hashicorp/go-hclog"
	"github.com/spf13/viper"
	"github.com/netauth/netauth/internal/db"
	"github.com/netauth/netauth/internal/startup"
)
func init() {
	startup.RegisterCallback(cb)
}
func cb() {
	db.RegisterKV("bitcask", New)
}
type BCStore struct {
	s *bitcask.Bitcask
	l hclog.Logger
	eF func(db.Event)
}
type eventType int
const (
	eventUpdate eventType = iota
	eventDelete
)
func New(l hclog.Logger) (db.KVStore, error) {
	p := filepath.Join(viper.GetString("core.home"), "bc")
	x := &BCStore{}
	x.l = l.Named("bitcask")
	opts := []bitcask.Option{
		bitcask.WithMaxKeySize(1024),
		bitcask.WithMaxValueSize(1024 * 1000 * 5),  
		bitcask.WithSync(true),
	}
	b, err := bitcask.Open(p, opts...)
	if err != nil {
		return nil, err
	}
	x.s = b
	return x, nil
}