Git Product home page Git Product logo

minimemcached's Introduction

Minimemcached

Go Reference Test

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

  • get
  • gets
  • cas
  • set
  • touch
  • add
  • replace
  • append
  • prepend
  • delete
  • incr
  • decr
  • flush_all
  • version

Setup

  • To use Minimemcached, you can import it as below. You can also view example code.
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))
	}
}

Benchmarks

  • Running same test cases on memcached server on a docker and minimemcached, minimemcached outperformed memcached running on docker container.
  • You can run this benchmark yourself. Check here.
Benchmark Environment

  • goos: darwin
  • goarch: arm64
  • memcached docker image: memcached:1.5.16

Results

# 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

  • As shown in the result above, minimemcached took about 47122.8 ns per operation, when memcached took about 1744273.2 ns per operation.

Author

Contributions

  • If you want to contribute to Minimemcached, feel free to create an issue or pull request!

minimemcached's People

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.