環境
- 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