ホームページ >バックエンド開発 >Golang >golang キャッシュを削除する

golang キャッシュを削除する

WBOY
WBOYオリジナル
2023-05-27 11:08:37807ブラウズ

ビッグ データとクラウド コンピューティング テクノロジの継続的な発展に伴い、データの処理とストレージにおけるキャッシュ テクノロジの重要性がますます高まっています。 golang では、キャッシュは重要なアプリケーション シナリオです。ただし、キャッシュが期限内に削除されないと、リソースの浪費やパフォーマンスの低下につながります。そこでこの記事では、golangを使ってキャッシュを削除してアプリケーションのパフォーマンスを向上させる方法を紹介します。

1.「キャッシュ」

キャッシュとは、データをメモリに保存する技術を指します。キャッシュ テクノロジを使用すると、ディスクやデータベースへのアクセスが減少し、データの読み取りおよび書き込み速度が向上するため、アプリケーションのパフォーマンスが向上します。キャッシュは通常、キャッシュ リソースとキャッシュ戦略の 2 つの部分で構成されます。キャッシュ リソースは、画像、ページ、データなど、キャッシュされるコンテンツを指します。キャッシュ戦略は、キャッシュ時間、キャッシュ サイズ、有効期限ポリシーなど、リソースをメモリに保存する方法を指します。

2. golang でのキャッシュ

golang では、非常に少ないコードでキャッシュを実装できます。以下は、簡単な golang キャッシュ呼び出しの例です。

import (
    "sync"
    "time"
)

type Cache struct {
    sync.RWMutex
    items     map[string]*cacheItem
    defaultTTL time.Duration
}

type cacheItem struct {
    value    interface{}
    created  time.Time
    duration time.Duration
}

func (c *Cache) Set(key string, value interface{}) {
    c.Lock()
    defer c.Unlock()

    item := &cacheItem{
        value:    value,
        created:  time.Now(),
        duration: c.defaultTTL,
    }
    c.items[key] = item
}

func (c *Cache) Get(key string) (interface{}, bool) {
    c.RLock()
    defer c.RUnlock()

    item, found := c.items[key]

    if !found {
        return nil, false
    }

    if time.Since(item.created) > item.duration {
        return nil, false
    }

    return item.value, true
}

上記のコードでは、Cache とcacheItem の 2 つの構造を使用します。キャッシュ構造には項目とdefaultTTL属性が含まれています。項目属性はキャッシュ・データを格納するために使用されるマップ・タイプであり、defaultTTLはキャッシュのデフォルトの有効期限を設定するために使用されます。 cacheItem 構造には、value、created、duration 属性が含まれており、それぞれキャッシュされた値、作成時間、キャッシュ時間を表します。

Set メソッドを通じて、キーと値のペアをキャッシュに保存できます。 Get メソッドでは、まずキーと値のペアが存在するかどうかをクエリし、存在しない場合は null と false を返します。それ以外の場合は、キャッシュ内のキーと値のペアの有効期限が切れているかどうかをクエリします。期限切れの場合は null と false を返し、それ以外の場合はキャッシュ内のキーと値のペアの値と true を返します。

3. Golang のキャッシュの削除

キャッシュ内のコンテンツが必要なくなったら、リソースの無駄やパフォーマンスの低下を避けるために、適時にキャッシュをクリアする必要があります。キャッシュを削除する実用的な Golang メソッドをいくつか紹介します。

  1. キャッシュ キー名でキャッシュを削除
func (c *Cache) Delete(key string) {
    c.Lock()
    defer c.Unlock()

    delete(c.items, key)
}

上記の Delete メソッドを使用して、キャッシュの 1 つをすばやく削除できます。 code キーと値のペア。このメソッドは、キャッシュ キー名を使用して、削除する必要があるキャッシュを検索します。このメソッドを呼び出す前に、スレッドの安全性を確保するためにロック操作が必要です。

  1. 期限切れのキャッシュを定期的に削除する

上記のコードでは、Get メソッドでキャッシュの有効期限について少し触れました。キャッシュの有効期限は、cacheItem の期間属性によって制御されます。期限切れのキャッシュを定期的に削除したい場合は、ゴルーチンを開いてキャッシュ内のすべてのキャッシュ項目を定期的にチェックし、期限切れのキャッシュ項目を削除します。

func (c *Cache) StartCleanup(routineInterval time.Duration) {
    ticker := time.NewTicker(routineInterval)
    go func() {
        for {
            select {
            case <-ticker.C:
                c.cleanup()
            }
        }
    }()
}

func (c *Cache) cleanup() {
    c.Lock()
    defer c.Unlock()

    for k, v := range c.items {
        if time.Since(v.created) > v.duration {
            delete(c.items, k)
        }
    }
}

上記のコードでは、ゴルーチンを開いてタイマーを渡します。定期的にクリーンアップ操作をトリガーするティッカー。定期的な清掃作業はクリーンアップ方式で実施されます。このメソッドは、キャッシュ内のすべてのキャッシュ アイテムを走査し、有効期限が切れたキャッシュ アイテムを削除します。

Delete メソッドと cleanup メソッドでは、スレッドの安全性を確保するために items 属性をロックする必要があることに注意してください。

4. 概要

この記事では、golang のキャッシュについて学び、golang を使用してキャッシュを削除してアプリケーションのパフォーマンスを向上させ、リソースの無駄を削減する方法を紹介しました。実際のアプリケーションでは、プロジェクトの実際のニーズに基づいてさまざまなキャッシュ戦略と有効期限を選択し、アプリケーションのパフォーマンスを最適化できます。同時に、キャッシュのスレッド安全性を確保し、メモリリークなどの問題を回避することにも注意を払う必要があります。

以上がgolang キャッシュを削除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。