Memcachedはキーバリュー型のデータストアです。
よく利用するデータをDBではなくMemcachedに保存しておくことで、パフォーマンス改善が望めます。
前職では商品データや(よく利用される)検索結果のデータをMemcachedに入れることでサイトのパフォーマンス向上を行っていました。
ローカル環境にMemcachedを準備する
Dockerを利用すれば簡単に環境を準備できます。
docker-composeのサンプルは以下になります。
version: "3"
services:
memcached:
image: memcached:latest
ports:
- "11211:11211"
Goから利用してみる
Goから利用するサンプルは以下の通りです
package main
import (
"encoding/json"
"github.com/bradfitz/gomemcache/memcache"
)
type Memcache_data struct {
Name string `json:"name"`
Tel string `json:"tel"`
}
func main() {
mc := memcache.New("127.0.0.1:11211")
data := Memcache_data{
Name: "foo bar",
Tel: "09011112222",
}
// memcachedにデータをセット
jsonData, err := json.Marshal(data)
if err != nil {
panic(err)
}
mc.Set(&memcache.Item{Key: "key", Value: []byte(jsonData)})
// memcachedからデモを取像
retVal, err := mc.Get("key")
if err != nil {
panic(err)
}
// jsonから構造体へ
var retValJson Memcache_data
json.Unmarshal(retVal.Value, &retValJson)
println(retValJson.Name)
println(retValJson.Tel)
}
Memcachedのパッケージがインポートできない場合、「go mod tidy」でパッケージをダウンロードしてください。
プロダクト開発では構造体を利用することが多い(と思う)ので、サンプルでは構造体をMemcachedに保存するようにしました。
構造体をそのままMemcachedに保存することはできないため、一旦Json文字列に変換した後Memcachedに保存しています。
実行結果は以下のとおりです。
構造体に設定した名前と電話番号が復元できたことが確認できました。
終わりに
キャッシュといえばRedisに世代交代するのかなと思っていたのですが、AWSやGCPにもmemcachedを利用したサービスが準備されていたりと、まだまだキャッシュシステムとしてはMemcachedは現役で利用されていますね。
利用方法もシンプルなので、気軽に利用できるのも良いかと思います。
参考サイト
https://qiita.com/masahikoofjoyto/items/a62a1c2b6c4affca772f
参考図書
created by Rinker
¥3,960
(2024/10/27 17:14:51時点 楽天市場調べ-詳細)
created by Rinker
¥6,155
(2024/10/27 17:14:51時点 楽天市場調べ-詳細)