Minimemcached is a Memcached server for written in Go, aimed for unittests in Go projects.
When you have to test codes that use Memcached server, running actual Memcached server instance could be quite expensive, depending on your environment.
Minimemcached aims to solve this problem by implementing Memcached's TCP interface 100% in Go, and works perfectly well with gomemcache, a memcache client for Go.
Implemented commands
package main
import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
"github.com/daangn/minimemcached"
)
func main() {
cfg := &minimemcached.Config{
Port: 8080,
}
m, err := minimemcached.Run(cfg)
if err != nil {
fmt.Println("failed to start mini-memcached server.")
return
}
defer m.Close()
fmt.Println("mini-memcached started")
mc := memcache.New(fmt.Sprintf("localhost:%d", m.Port()))
err = mc.Set(&memcache.Item{Key: "foo", Value: []byte("my value"), Expiration: int32(60)})
if err != nil {
fmt.Printf("err(set): %v\n", err)
}
it, err := mc.Get("foo")
if err != nil {
fmt.Printf("err(get): %v\n", err)
} else {
fmt.Printf("key: %s, value: %s\n", it.Key, it.Value)
fmt.Printf("value: %s\n", string(it.Value))
}
}
Benchmark Environment
memcached:1.5.16# Memcached running on a docker container.
BenchmarkMemcached-8 610 1721643 ns/op
BenchmarkMemcached-8 729 1714716 ns/op
BenchmarkMemcached-8 717 1716914 ns/op
BenchmarkMemcached-8 698 1783312 ns/op
BenchmarkMemcached-8 693 1784781 ns/op
# Minimemcached.
BenchmarkMinimemcached-8 24710 46661 ns/op
BenchmarkMinimemcached-8 24684 47918 ns/op
BenchmarkMinimemcached-8 24866 47558 ns/op
BenchmarkMinimemcached-8 25046 46770 ns/op
BenchmarkMinimemcached-8 26085 46707 ns/op
op: set, get, delete operation
$ claude mcp add minimemcached \
-- python -m otcore.mcp_server <graph>