Documentation ¶
Overview ¶
Package memcached provides a memcached binary protocol client.
Index ¶
- Constants
- Variables
- func UnwrapMemcachedError(rv *gomemcached.MCResponse, err error) (*gomemcached.MCResponse, error)
- type CASState
- type CasFunc
- type CasOp
- type Client
- func (c *Client) Add(vb uint16, key string, flags int, exp int, body []byte) (*gomemcached.MCResponse, error)
- func (c *Client) Append(vb uint16, key string, data []byte) (*gomemcached.MCResponse, error)
- func (c *Client) Auth(user, pass string) (*gomemcached.MCResponse, error)
- func (c *Client) AuthList() (*gomemcached.MCResponse, error)
- func (c *Client) CAS(vb uint16, k string, f CasFunc, initexp int) (*gomemcached.MCResponse, error)
- func (c *Client) CASNext(vb uint16, k string, exp int, state *CASState) bool
- func (c *Client) Close() error
- func (c *Client) Del(vb uint16, key string) (*gomemcached.MCResponse, error)
- func (c *Client) Get(vb uint16, key string) (*gomemcached.MCResponse, error)
- func (c *Client) GetBulk(vb uint16, keys []string) (map[string]*gomemcached.MCResponse, error)
- func (c *Client) Hijack() io.ReadWriteCloser
- func (c *Client) Incr(vb uint16, key string, amt, def uint64, exp int) (uint64, error)
- func (c Client) IsHealthy() bool
- func (c *Client) Observe(vb uint16, key string) (result ObserveResult, err error)
- func (c *Client) Receive() (*gomemcached.MCResponse, error)
- func (c *Client) Send(req *gomemcached.MCRequest) (rv *gomemcached.MCResponse, err error)
- func (c *Client) Set(vb uint16, key string, flags int, exp int, body []byte) (*gomemcached.MCResponse, error)
- func (mc *Client) StartTapFeed(args TapArguments) (*TapFeed, error)
- func (c *Client) Stats(key string) ([]StatValue, error)
- func (c *Client) StatsMap(key string) (map[string]string, error)
- func (c *Client) Transmit(req *gomemcached.MCRequest) error
- type ObserveResult
- type ObservedStatus
- type StatValue
- type TapArguments
- type TapEvent
- type TapFeed
- type TapOpcode
Constants ¶
const ( ObservedNotPersisted = ObservedStatus(0x00) // found, not persisted ObservedPersisted = ObservedStatus(0x01) // found, persisted ObservedNotFound = ObservedStatus(0x80) // not found (or a persisted delete) ObservedLogicallyDeleted = ObservedStatus(0x81) // pending deletion (not persisted yet) )
Observation status values.
const ( // CASStore instructs the server to store the new value normally CASStore = CasOp(iota) // CASQuit instructs the client to stop attempting to CAS, leaving value untouched CASQuit // CASDelete instructs the server to delete the current value CASDelete )
const ( TapBeginBackfill = TapOpcode(iota) TapEndBackfill TapMutation TapDeletion TapCheckpointStart TapCheckpointEnd )
Tap opcode values.
const TapNoBackfill = math.MaxUint64
Value for TapArguments.Backfill denoting that no past events at all should be sent.
Variables ¶
var ReceiveHook func(*gomemcached.MCResponse, int, error)
ReceiveHook is called after every packet is received (or attempted to be)
var TapRecvHook func(*gomemcached.MCRequest, int, error)
TapRecvHook is called after every incoming tap packet is received.
var TransmitHook func(*gomemcached.MCRequest, int, error)
TransmitHook is called after each packet is transmitted.
Functions ¶
func UnwrapMemcachedError ¶
func UnwrapMemcachedError(rv *gomemcached.MCResponse, err error) (*gomemcached.MCResponse, error)
UnwrapMemcachedError converts memcached errors to normal responses.
If the error is a memcached response, declare the error to be nil so a client can handle the status without worrying about whether it indicates success or failure.
Types ¶
type CASState ¶
type CASState struct { Value []byte // Current value of key; update in place to new value Cas uint64 // Current CAS value of key Exists bool // Does a value exist for the key? (If not, Value will be nil) Err error // Error, if any, after CASNext returns false // contains filtered or unexported fields }
CASState tracks the state of CAS over several operations.
This is used directly by CASNext and indirectly by CAS
type CasFunc ¶
CasFunc is type type of function to perform a CAS transform.
Input is the current value, or nil if no value exists. The function should return the new value (if any) to set, and the store/quit/delete operation.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
The Client itself.
func (*Client) Add ¶
func (c *Client) Add(vb uint16, key string, flags int, exp int, body []byte) (*gomemcached.MCResponse, error)
Add a value for a key (store if not exists).
func (*Client) Append ¶
func (c *Client) Append(vb uint16, key string, data []byte) (*gomemcached.MCResponse, error)
Append data to the value of a key.
func (*Client) Auth ¶
func (c *Client) Auth(user, pass string) (*gomemcached.MCResponse, error)
Auth performs SASL PLAIN authentication against the server.
func (*Client) AuthList ¶
func (c *Client) AuthList() (*gomemcached.MCResponse, error)
AuthList lists SASL auth mechanisms.
func (*Client) CAS ¶
func (c *Client) CAS(vb uint16, k string, f CasFunc, initexp int) (*gomemcached.MCResponse, error)
CAS performs a CAS transform with the given function.
If the value does not exist, a nil current value will be sent to f.
func (*Client) CASNext ¶
CASNext is a non-callback, loop-based version of CAS method.
Usage is like this:
var state memcached.CASState
for client.CASNext(vb, key, exp, &state) { state.Value = some_mutation(state.Value) }
if state.Err != nil { ... }
func (*Client) Del ¶
func (c *Client) Del(vb uint16, key string) (*gomemcached.MCResponse, error)
Del deletes a key.
func (*Client) Get ¶
func (c *Client) Get(vb uint16, key string) (*gomemcached.MCResponse, error)
Get the value for a key.
func (*Client) GetBulk ¶
func (c *Client) GetBulk(vb uint16, keys []string) (map[string]*gomemcached.MCResponse, error)
GetBulk gets keys in bulk
func (*Client) Hijack ¶
func (c *Client) Hijack() io.ReadWriteCloser
Hijack exposes the underlying connection from this client.
It also marks the connection as unhealthy since the client will have lost control over the connection and can't otherwise verify things are in good shape for connection pools.
func (Client) IsHealthy ¶
IsHealthy returns true unless the client is belived to have difficulty communicating to its server.
This is useful for connection pools where we want to non-destructively determine that a connection may be reused.
func (*Client) Observe ¶
func (c *Client) Observe(vb uint16, key string) (result ObserveResult, err error)
Observe gets the persistence/replication/CAS state of a key
func (*Client) Receive ¶
func (c *Client) Receive() (*gomemcached.MCResponse, error)
Receive a response
func (*Client) Send ¶
func (c *Client) Send(req *gomemcached.MCRequest) (rv *gomemcached.MCResponse, err error)
Send a custom request and get the response.
func (*Client) Set ¶
func (c *Client) Set(vb uint16, key string, flags int, exp int, body []byte) (*gomemcached.MCResponse, error)
Set the value for a key.
func (*Client) StartTapFeed ¶
func (mc *Client) StartTapFeed(args TapArguments) (*TapFeed, error)
StartTapFeed starts a TAP feed on a client connection.
The events can be read from the returned channel. The connection can no longer be used for other purposes; it's now reserved for receiving the TAP messages. To stop receiving events, close the client connection.
type ObserveResult ¶
type ObserveResult struct { Status ObservedStatus // Whether the value has been persisted/deleted Cas uint64 // Current value's CAS PersistenceTime time.Duration // Node's average time to persist a value ReplicationTime time.Duration // Node's average time to replicate a value }
ObserveResult represents the data obtained by an Observe call
func (ObserveResult) CheckPersistence ¶
func (result ObserveResult) CheckPersistence(cas uint64, deletion bool) (persisted bool, overwritten bool)
CheckPersistence checks whether a stored value has been persisted to disk yet.
type ObservedStatus ¶
type ObservedStatus uint8
ObservedStatus is the type reported by the Observe method
type TapArguments ¶
type TapArguments struct { // Timestamp of oldest item to send. // // Use TapNoBackfill to suppress all past items. Backfill uint64 // If set, server will disconnect after sending existing items. Dump bool // The indices of the vbuckets to watch; empty/nil to watch all. VBuckets []uint16 // Transfers ownership of vbuckets during cluster rebalance. Takeover bool // If true, server will wait for client ACK after every notification. SupportAck bool // If true, client doesn't want values so server shouldn't send them. KeysOnly bool // If true, client wants the server to send checkpoint events. Checkpoint bool // Optional identifier to use for this client, to allow reconnects ClientName string // Registers this client (by name) till explicitly deregistered. RegisteredClient bool }
TapArguments are parameters for requesting a TAP feed.
Call DefaultTapArguments to get a default one.
func DefaultTapArguments ¶
func DefaultTapArguments() TapArguments
DefaultTapArguments returns a default set of parameter values to pass to StartTapFeed.
type TapEvent ¶
type TapEvent struct { Opcode TapOpcode // Type of event VBucket uint16 // VBucket this event applies to Flags uint32 // Item flags Expiry uint32 // Item expiration time Key, Value []byte // Item key/value Cas uint64 }
TapEvent is a TAP notification of an operation on the server.