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
Add は、キーに値が存在しない場合、指定された項目を書き込みます。この条件を満たしていない場合、ErrNotStored が返されます。
func AddMulti
AddMulti は Add のバッチ バージョンです。appengine.MultiError が返される場合があります。
func CompareAndSwap
Get と CompareAndSwap 呼び出しの間に値が変更または削除されていない場合、CompareAndSwap は、Get で取得済みの特定の項目を書き込みます。呼び出し間で項目のキーは変更されませんが、他の項目のフィールドは変更される場合があります。呼び出し間で値が変更された場合、ErrCASConflict が返されます。呼び出し間で値が削除された場合、ErrNotStored が返されます。
func CompareAndSwapMulti
ComputeAndSwapMulti は、CompareAndSwap のバッチ バージョンです。appengine.MultiError が返されることがあります。
func Delete
Delete は、指定されたキーの項目を削除します。指定された項目が見つからないと、ErrCacheMiss が返されます。キーの長さは 250 バイト以下にする必要があります。
func DeleteMulti
DeleteMulti は、Delete のバッチ バージョンです。キーが見つからない場合は、appengine.MultiError が返されます。各キーの長さは 250 バイト以下にする必要があります。
func Flush
Flush は、memcache からすべての項目をフラッシュします。
func GetMulti
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
IncrementExisting は Increment に似ていますが、キーが memcache にすでに存在し、初期値を使用しないことが前提となります。初期値の計算に費用がかかる場合、IncrementExisting を使用するとコストを抑えることができます。指定された項目が見つからないと、エラーが返されます。
func PeekMulti
PeekMulti は Peek のバッチ バージョンです。GetMulti と似ていますが、さらに Item.Timestamps を入力します。
func Set
Set は、特定の項目を無条件に書き込みます。
func SetMulti
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
Add は、キーに値が存在しない場合、指定された項目を書き込みます。この条件を満たしていない場合、ErrNotStored が返されます。
func (Codec) AddMulti
AddMulti は Add のバッチ バージョンです。appengine.MultiError が返される場合があります。
func (Codec) CompareAndSwap
Get と CompareAndSwap 呼び出しの間に値が変更または削除されていない場合、CompareAndSwap は、Get で取得済みの特定の項目を書き込みます。呼び出し間で項目のキーは変更されませんが、他の項目のフィールドは変更される場合があります。呼び出し間で値が変更された場合、ErrCASConflict が返されます。呼び出し間で値が削除された場合、ErrNotStored が返されます。
func (Codec) CompareAndSwapMulti
ComputeAndSwapMulti は、CompareAndSwap のバッチ バージョンです。appengine.MultiError が返されることがあります。
func (Codec) Get
Get は、特定のキーアイテムを取得し、取得した値を v にデコードします。memcache のキャッシュミスの場合、ErrCacheMiss を返します。キーの長さは 250 バイト以下にする必要があります。
func (Codec) Set
Set は、特定の項目を無条件に書き込みます。
func (Codec) SetMulti
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
Get は、指定されたキーの項目を取得します。memcache でキャッシュミスが発生すると、ErrCacheMiss が返されます。キーの長さは 250 バイト以下にする必要があります。
func Peek
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 統計情報を取得します。