[Go言語]sync.Mapでローカルキャッシュを作ろう!

こんにちは。KOUKIです。とある企業でWeb系の開発エンジニアをしています。

Go言語でWeb開発をしていますが、最近ローカルキャッシュの実装をsync.Mapを使って実装したので、使い方を備忘として残しておきます。

Sync.Mapとは

sync.Mapは、Go言語のMapの様にメモリにKey/Valueの形式で値を保存できる仕組みです。

内部的にsyncパッケージのMutexでリソースの排他制御を行ってくれるので、goroutine上で動かしても安全で、使いやすいです。

使える機能は以下の通りです。

実際に動かしながら学んでいきましょう。

Store/Range

Storeでデータを格納し、Rangeで全てのデータを取り出せます。

データの格納と取り出しはこんな感じです。

直感的でわかりやすいですよね。

出力条件も絞れますね。

LoadOrStore

LoadOrStoreは、値の格納と読み込みが同時にできるようです。

Delete

値の削除も簡単です。

Delete(Key)でOKです。。

Load

単にデータを読み込みたい場合は、Loadメソッドを使います。

注意するべき点ですが、Loadの戻り値です。上記ではType: stringと出ているのでstring型が返ってくると思いがちですが、実はinterfaceが返ってきます。

そのため、キャストが必要になる場合があります。

With Goroutine

goroutineと共に使ってもデットロックなどは発生しません。

おわり

メソッドの基本的な使い方は以上です。結構簡単でした?

sync.Mapは、Redisのようなキャッシュの使い方ができて個人的には便利だと思っています。

この様にライブラリがシンプルかつ充実しているので、Go言語は本当に描きやすい言語です

本当にオススメですよ。

それでは、また!

オススメ書籍

関連記事