エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
【Go】Channelを使ってSingle Flightなキャッシュを実装する - Qiita
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
【Go】Channelを使ってSingle Flightなキャッシュを実装する - Qiita
昨年のAdvent Calendarに引き続きChannelネタです。 前置き データベースアクセスを削減する為に取得し... 昨年のAdvent Calendarに引き続きChannelネタです。 前置き データベースアクセスを削減する為に取得したデータをローカルにキャッシュする、みたいなことをよくやります。 シンプルに書くと↓みたいなカンジでしょうか。 var cache sync.Map func get(key string) (v interface{}, err error) { v, ok := cache.Load(key) if !ok { v, err = getFromDB(key) if err != nil { return nil, err } cache.Store(key, v) } return v, nil } キャッシュが存在しなければDBに取得しに行きます。 さて、上記コード、一つ問題があります。 キャッシュされていない状態で同じkeyでcache.Load→cache.St