パッケージ google.golang.org/appengine/memcache(v1.6.8)

memcache パッケージは、App Engine の分散メモリ内に任意の小さなデータチャンクを Key-Value として保存するクライアントを提供します。

基本的なオペレーションは、文字列をキーとする項目の取得と設定です。

item0, err := memcache.Get(c, "key")
if err != nil && err != memcache.ErrCacheMiss {
    return err
}
if err == nil {
    fmt.Fprintf(w, "memcache hit: Key=%q Val=[% x]\n", item0.Key, item0.Value)
} else {
    fmt.Fprintf(w, "memcache miss\n")
}

item1 := &memcache.Item{
    Key:   "foo",
    Value: []byte("bar"),
}
if err := memcache.Set(c, item1); err != nil {
    return err
}

変数

ErrCacheMiss、ErrCASConflict、ErrNoStats、ErrNotStored、ErrServerError

var (
	// ErrCacheMiss means that an operation failed
	// because the item wasn't present.
	ErrCacheMiss = errors.New("memcache: cache miss")
	// ErrCASConflict means that a CompareAndSwap call failed due to the
	// cached value being modified between the Get and the CompareAndSwap.
	// If the cached value was simply evicted rather than replaced,
	// ErrNotStored will be returned instead.
	ErrCASConflict = errors.New("memcache: compare-and-swap conflict")
	// ErrNoStats means that no statistics were available.
	ErrNoStats = errors.New("memcache: no statistics available")
	// ErrNotStored means that a conditional write operation (i.e. Add or
	// CompareAndSwap) failed because the condition was not satisfied.
	ErrNotStored = errors.New("memcache: item not stored")
	// ErrServerError means that a server error occurred.
	ErrServerError = errors.New("memcache: server error")
)

Gob、JSON

var (
	// Gob is a Codec that uses the gob package.
	Gob = Codec{gobMarshal, gobUnmarshal}
	// JSON is a Codec that uses the json package.
	JSON = Codec{json.Marshal, json.Unmarshal}
)

関数

func Add

func Add(c context.Context, item *Item) error

Add は、キーに値が存在しない場合、指定された項目を書き込みます。この条件を満たしていない場合、ErrNotStored が返されます。

func AddMulti

func AddMulti(c context.Context, item []*Item) error

AddMulti は Add のバッチ バージョンです。appengine.MultiError が返される場合があります。

func CompareAndSwap

func CompareAndSwap(c context.Context, item *Item) error

Get と CompareAndSwap 呼び出しの間に値が変更または削除されていない場合、CompareAndSwap は、Get で取得済みの特定の項目を書き込みます。呼び出し間で項目のキーは変更されませんが、他の項目のフィールドは変更される場合があります。呼び出し間で値が変更された場合、ErrCASConflict が返されます。呼び出し間で値が削除された場合、ErrNotStored が返されます。

func CompareAndSwapMulti

func CompareAndSwapMulti(c context.Context, item []*Item) error

ComputeAndSwapMulti は、CompareAndSwap のバッチ バージョンです。appengine.MultiError が返されることがあります。

func Delete

func Delete(c context.Context, key string) error

Delete は、指定されたキーの項目を削除します。指定された項目が見つからないと、ErrCacheMiss が返されます。キーの長さは 250 バイト以下にする必要があります。

func DeleteMulti

func DeleteMulti(c context.Context, key []string) error

DeleteMulti は、Delete のバッチ バージョンです。キーが見つからない場合は、appengine.MultiError が返されます。各キーの長さは 250 バイト以下にする必要があります。

func Flush

func Flush(c context.Context) error

Flush は、memcache からすべての項目をフラッシュします。

func GetMulti

func GetMulti(c context.Context, key []string) (map[string]*Item, error)

GetMulti は、Get のバッチ バージョンです。memcache のキャッシュミスのため、キーから項目に返されるマップの要素が入力スライスより少なくなる場合があります。各キーの長さは 250 バイト以下にする必要があります。

func Increment

func Increment(c context.Context, key string, delta int64, initialValue uint64) (newValue uint64, err error)

Increment は、指定されたキーの小数値をデルタでアトミックに増分し、新しい値を返します。値は uint64 になります。オバーフローはラップラウンドし、アンダーフローはゼロに制限されます。指定されたデルタは負の値になる場合があります。memcache にキーが存在しない場合、デルタが適用される前に、指定された初期値が使用され、アトミックに更新されます。キーの長さは 250 バイト以下にする必要があります。

func IncrementExisting

func IncrementExisting(c context.Context, key string, delta int64) (newValue uint64, err error)

IncrementExisting は Increment に似ていますが、キーが memcache にすでに存在し、初期値を使用しないことが前提となります。初期値の計算に費用がかかる場合、IncrementExisting を使用するとコストを抑えることができます。指定された項目が見つからないと、エラーが返されます。

func PeekMulti

func PeekMulti(c context.Context, key []string) (map[string]*Item, error)

PeekMulti は Peek のバッチ バージョンです。GetMulti と似ていますが、さらに Item.Timestamps を入力します。

func Set

func Set(c context.Context, item *Item) error

Set は、特定の項目を無条件に書き込みます。

func SetMulti

func SetMulti(c context.Context, item []*Item) error

SetMulti は、Set のバッチ バージョンです。appengine.MultiError が返されることがあります。

Codec

type Codec struct {
	Marshal   func(interface{}) ([]byte, error)
	Unmarshal func([]byte, interface{}) error
}

Codec は、コーデックを実装する関数の対称ペアを表します。Codec を使用して memcache に保存される項目または memcache から取得される項目は、マーシャリングまたはマーシャリング解除された値を持ちます。

Codec に適用されたすべてのメソッドは、同じ名前のパッケージ レベルの関数と同様に機能します。

func (Codec) Add

func (cd Codec) Add(c context.Context, item *Item) error

Add は、キーに値が存在しない場合、指定された項目を書き込みます。この条件を満たしていない場合、ErrNotStored が返されます。

func (Codec) AddMulti

func (cd Codec) AddMulti(c context.Context, items []*Item) error

AddMulti は Add のバッチ バージョンです。appengine.MultiError が返される場合があります。

func (Codec) CompareAndSwap

func (cd Codec) CompareAndSwap(c context.Context, item *Item) error

Get と CompareAndSwap 呼び出しの間に値が変更または削除されていない場合、CompareAndSwap は、Get で取得済みの特定の項目を書き込みます。呼び出し間で項目のキーは変更されませんが、他の項目のフィールドは変更される場合があります。呼び出し間で値が変更された場合、ErrCASConflict が返されます。呼び出し間で値が削除された場合、ErrNotStored が返されます。

func (Codec) CompareAndSwapMulti

func (cd Codec) CompareAndSwapMulti(c context.Context, items []*Item) error

ComputeAndSwapMulti は、CompareAndSwap のバッチ バージョンです。appengine.MultiError が返されることがあります。

func (Codec) Get

func (cd Codec) Get(c context.Context, key string, v interface{}) (*Item, error)

Get は、特定のキーアイテムを取得し、取得した値を v にデコードします。memcache のキャッシュミスの場合、ErrCacheMiss を返します。キーの長さは 250 バイト以下にする必要があります。

func (Codec) Set

func (cd Codec) Set(c context.Context, item *Item) error

Set は、特定の項目を無条件に書き込みます。

func (Codec) SetMulti

func (cd Codec) SetMulti(c context.Context, items []*Item) error

SetMulti は、Set のバッチ バージョンです。appengine.MultiError が返されることがあります。

Item

type Item struct {
	// Key is the Item's key (250 bytes maximum).
	Key string
	// Value is the Item's value.
	Value []byte
	// Object is the Item's value for use with a Codec.
	Object interface{}
	// Flags are server-opaque flags whose semantics are entirely up to the
	// App Engine app.
	Flags uint32
	// Expiration is the maximum duration that the item will stay
	// in the cache.
	// The zero value means the Item has no expiration time.
	// Subsecond precision is ignored.
	// This is not set when getting items.
	Expiration time.Duration

	// ItemTimestamps are server values only returned when calling Peek and PeekMulti.
	// The timestamps are nil when calling Get and GetMulti.
	Timestamps ItemTimestamps
	// contains filtered or unexported fields
}

Item は、memcache get と set の単位です。

func Get

func Get(c context.Context, key string) (*Item, error)

Get は、指定されたキーの項目を取得します。memcache でキャッシュミスが発生すると、ErrCacheMiss が返されます。キーの長さは 250 バイト以下にする必要があります。

func Peek

func Peek(c context.Context, key string) (*Item, error)

Peek は指定されたキーの項目を取得し、さらに Item.Timestamps を入力します。 memcache でキャッシュミスが発生すると、ErrCacheMiss が返されます。キーの長さは 250 バイト以下にする必要があります。

ItemTimestamps

type ItemTimestamps struct {
	// Expiration is related to Item.Expiration but it is a Time (not a Duration),
	// provided by the server. It is not meant to be set by the user.
	Expiration *time.Time
	// LastAccess is the last time the Item was accessed.
	LastAccess *time.Time
}

ItemTimestamps は、サーバーによってオプションで提供されるタイムスタンプです。Peek と PeekMulti をご覧ください。

Statistics

type Statistics struct {
	Hits     uint64 // Counter of cache hits
	Misses   uint64 // Counter of cache misses
	ByteHits uint64 // Counter of bytes transferred for gets

	Items uint64 // Items currently in the cache
	Bytes uint64 // Size of all items currently in the cache

	Oldest int64 // Age of access of the oldest item, in seconds
}

Statistics は、memcache キャッシュに関する一連の統計を表します。この統計には、キャッシュから削除されていない期限切れの項目が含まれている場合もあります。

func Stats

func Stats(c context.Context) (*Statistics, error)

Stats は、現在の memcache 統計情報を取得します。