func (i *InmemBackend) Get(key string) (*Entry, error) {
	i.permitPool.Acquire()
	defer i.permitPool.Release()
	i.l.RLock()
	defer i.l.RUnlock()
	if raw, ok := i.root.Get(key); ok {
		return raw.(*Entry), nil
	}
	return nil, nil
}
Get is used to fetch an entry
package physical
import (
	"strings"
	"sync"
	log "github.com/mgutz/logxi/v1"
	"github.com/armon/go-radix"
)
type InmemBackend struct {
	root       *radix.Tree
	l          sync.RWMutex
	permitPool *PermitPool
	logger     log.Logger
}
func NewInmem(logger log.Logger) *InmemBackend {
	in := &InmemBackend{
		root:       radix.New(),
		permitPool: NewPermitPool(DefaultParallelOperations),
		logger:     logger,
	}
	return in
}
func (i *InmemBackend) Put(entry *Entry) error {
	i.permitPool.Acquire()
	defer i.permitPool.Release()
	i.l.Lock()
	defer i.l.Unlock()
	i.root.Insert(entry.Key, entry)
	return nil
}