Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package cache provides interface and implementation of a cache algorithms.
Index ¶
Constants ¶
      View Source
      
  
const ( DelNotExist = iota DelExist DelPendig )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Cache ¶
type Cache interface {
	// SetCapacity sets cache tree capacity.
	SetCapacity(capacity int)
	// Capacity returns cache tree capacity.
	Capacity() int
	// Used returns used cache tree capacity.
	Used() int
	// Size returns entire alive cache objects size.
	Size() int
	// NumObjects returns number of alive objects.
	NumObjects() int
	// GetNamespace gets cache namespace with the given id.
	// GetNamespace is never return nil.
	GetNamespace(id uint64) Namespace
	// PurgeNamespace purges cache namespace with the given id from this cache tree.
	// Also read Namespace.Purge.
	PurgeNamespace(id uint64, fin PurgeFin)
	// ZapNamespace detaches cache namespace with the given id from this cache tree.
	// Also read Namespace.Zap.
	ZapNamespace(id uint64)
	// Purge purges all cache namespace from this cache tree.
	// This is behave the same as calling Namespace.Purge method on all cache namespace.
	Purge(fin PurgeFin)
	// Zap detaches all cache namespace from this cache tree.
	// This is behave the same as calling Namespace.Zap method on all cache namespace.
	Zap()
}
    Cache is a cache tree. A cache instance must be goroutine-safe.
func NewLRUCache ¶
NewLRUCache creates a new initialized LRU cache with the given capacity.
type DelFin ¶
type DelFin func(exist, pending bool)
DelFin is the function that will be called as the result of a delete operation. Exist == true is indication that the object is exist, and pending == true is indication of deletion already happen but haven't done yet (wait for all handles to be released). And exist == false means the object doesn't exist.
type Handle ¶
type Handle interface {
	// Release releases this cache handle. This method can be safely called mutiple
	// times.
	Release()
	// Value returns value of this cache handle.
	// Value will returns nil after this cache handle have be released.
	Value() interface{}
}
    Handle is a cache handle.
type Namespace ¶
type Namespace interface {
	// Get gets cache object with the given key.
	// If cache object is not found and setf is not nil, Get will atomically creates
	// the cache object by calling setf. Otherwise Get will returns nil.
	//
	// The returned cache handle should be released after use by calling Release
	// method.
	Get(key uint64, setf SetFunc) Handle
	// Delete removes cache object with the given key from cache tree.
	// A deleted cache object will be released as soon as all of its handles have
	// been released.
	// Delete only happen once, subsequent delete will consider cache object doesn't
	// exist, even if the cache object ins't released yet.
	//
	// If not nil, fin will be called if the cache object doesn't exist or when
	// finally be released.
	//
	// Delete returns true if such cache object exist and never been deleted.
	Delete(key uint64, fin DelFin) bool
	// Purge removes all cache objects within this namespace from cache tree.
	// This is the same as doing delete on all cache objects.
	//
	// If not nil, fin will be called on all cache objects when its finally be
	// released.
	Purge(fin PurgeFin)
	// Zap detaches namespace from cache tree and release all its cache objects.
	// A zapped namespace can never be filled again.
	// Calling Get on zapped namespace will always return nil.
	Zap()
}
    Namespace is a cache namespace. A namespace instance must be goroutine-safe.
 Click to show internal directories. 
   Click to hide internal directories.