Docker + Go + Memcached を試す

環境

  • Mac OS 14.6
  • Docker v28.1.1
  • Go v1.25.0
  • Memcached v1.6.41

Memcached とは

Memcachedは、データベースやAPIへのアクセス負荷を軽減し、
Webアプリケーションの速度を劇的に向上させるための高性能な分散型メモリキャッシュシステム

だそう。

使い所

主に DB へのアクセスを減らす目的で使用してる。

使うライブラリとか

サンプルコード

試すだけなので、 gp run で確認するだけ。
主要ファイルのみ抜粋。

docker-compose.yaml

services:
    go-sample-app:
        image: nginx:1.27.0-perl
        ports:
            - 8080:80
        tty: true
        depends_on:
            - go-sample-go
        volumes:
            - ./app:/var/www/html
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
        working_dir: /var/www/html
    go-sample-go:
        build:
            context: .
            dockerfile: ./go/Dockerfile
        volumes:
            - ./app:/var/www/html
        working_dir: /var/www/html
    go-sample-memcached:
        image: memcached:1.6.41
        command:
            - --conn-limit=1024
            - --memory-limit=64
            - --threads=4

app/main.go

本家のサンプルコードをほぼコピペ。

package main

import (
	"fmt"
	"github.com/bradfitz/gomemcache/memcache"
)

func main() {
	mc := memcache.New("go-sample-memcached:11211")
	mc.Set(&memcache.Item{
		Key: "foo",
		Value: []byte("my value"),
		Expiration: 10,// 秒(sec)
	})

	it, err := mc.Get("foo")

	if err != nil {
		fmt.Print(err.Error(), "\n")
		return
	}

	fmt.Print(it, "\n", string(it.Value), "\n")
}

確認する

# go のコンテナ名を確認
$ docker ps

# go のコンテナに入る
$ docker exec -it go-sample-go-sample-go-1 /bin/bash

# 必要であればインストール
$ go mod tidy

# 確認
$ go run memcached.go
&{foo [109 121 32 118 97 108 117 101] 0 0 4}
my value