Documentation ¶
Overview ¶
An LRU cached aimed at high concurrency
An LRU cached aimed at high concurrency ¶
An LRU cached aimed at high concurrency
Index ¶
- Variables
- func BitHighestInt64(n int64) (pos int)
- func NormalTo2N(n int64) int64
- type Cache
- func (c *Cache) Clear()
- func (c *Cache) Delete(key string) bool
- func (c *Cache) DeleteFunc(matches func(key string, item *Item) bool) int
- func (c *Cache) DeletePrefix(prefix string) int
- func (c *Cache) Fetch(key string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error)
- func (c *Cache) FetchNow(key string, now time.Time, duration time.Duration, ...) (*Item, error)
- func (c *Cache) Get(key string) *Item
- func (c *Cache) GetDropped() int
- func (c *Cache) GetIncrVal(key string) (r int64)
- func (c *Cache) GetItem(key string) *Item
- func (c *Cache) GetItemWithNow(key string, now time.Time) (*Item, bool)
- func (c *Cache) GetWithNow(key string, now time.Time) *Item
- func (c *Cache) GetWithNowNoPromote(key string, now time.Time) (*Item, bool)
- func (c *Cache) Incr(key string, n int64, duration time.Duration) int64
- func (c *Cache) IncrNow(key string, n int64, now time.Time, duration time.Duration) int64
- func (c *Cache) IncrNowPromote(key string, n int64, now time.Time, duration time.Duration) int64
- func (c *Cache) IncrPromote(key string, n int64, duration time.Duration) int64
- func (c *Cache) ItemCount() int
- func (c *Cache) Promote(item *Item)
- func (c *Cache) Replace(key string, value interface{}) bool
- func (c *Cache) Set(key string, value interface{}, duration time.Duration)
- func (c *Cache) SetMaxSize(size int64)
- func (c *Cache) SetWithDeadline(key string, value interface{}, deadline time.Time)
- func (c *Cache) Stop()
- func (c *Cache) TrackingGet(key string) TrackedItem
- func (c *Cache) TrackingSet(key string, value interface{}, duration time.Duration) TrackedItem
- type CacheInt64
- func (c *CacheInt64) Clear()
- func (c *CacheInt64) Delete(key int64) bool
- func (c *CacheInt64) DeleteFunc(matches func(key int64, item *ItemInt64) bool) int
- func (c *CacheInt64) DeletePrefix(prefix int64) int
- func (c *CacheInt64) Fetch(key int64, duration time.Duration, fetch func() (interface{}, error)) (*ItemInt64, error)
- func (c *CacheInt64) FetchNow(key int64, now time.Time, duration time.Duration, ...) (*ItemInt64, error)
- func (c *CacheInt64) Get(key int64) *ItemInt64
- func (c *CacheInt64) GetDropped() int
- func (c *CacheInt64) GetIncrVal(key int64) (r int64)
- func (c *CacheInt64) GetItem(key int64) *ItemInt64
- func (c *CacheInt64) GetItemWithNow(key int64, now time.Time) (*ItemInt64, bool)
- func (c *CacheInt64) GetWithNow(key int64, now time.Time) *ItemInt64
- func (c *CacheInt64) GetWithNowNoPromote(key int64, now time.Time) (*ItemInt64, bool)
- func (c *CacheInt64) Incr(key int64, n int64, duration time.Duration) int64
- func (c *CacheInt64) IncrNow(key int64, n int64, now time.Time, duration time.Duration) int64
- func (c *CacheInt64) IncrNowPromote(key int64, n int64, now time.Time, duration time.Duration) int64
- func (c *CacheInt64) IncrPromote(key int64, n int64, duration time.Duration) int64
- func (c *CacheInt64) ItemCount() int
- func (c *CacheInt64) Promote(item *ItemInt64)
- func (c *CacheInt64) Replace(key int64, value interface{}) bool
- func (c *CacheInt64) Set(key int64, value interface{}, duration time.Duration)
- func (c *CacheInt64) SetMaxSize(size int64)
- func (c *CacheInt64) SetWithDeadline(key int64, value interface{}, deadline time.Time)
- func (c *CacheInt64) Stop()
- func (c *CacheInt64) TrackingGet(key int64) TrackedItem
- func (c *CacheInt64) TrackingSet(key int64, value interface{}, duration time.Duration) TrackedItem
- type Configuration
- func (c *Configuration) Buckets(count uint32) *Configuration
- func (c *Configuration) DeleteBuffer(size uint32) *Configuration
- func (c *Configuration) GetsPerPromote(count int32) *Configuration
- func (c *Configuration) ItemsToPrune(count uint32) *Configuration
- func (c *Configuration) MaxSize(max int64) *Configuration
- func (c *Configuration) OnDelete(callback func(item *Item)) *Configuration
- func (c *Configuration) PromoteBuffer(size uint32) *Configuration
- func (c *Configuration) Track() *Configuration
- type ConfigurationInt64
- func (c *ConfigurationInt64) Buckets(count uint32) *ConfigurationInt64
- func (c *ConfigurationInt64) DeleteBuffer(size uint32) *ConfigurationInt64
- func (c *ConfigurationInt64) GetsPerPromote(count int32) *ConfigurationInt64
- func (c *ConfigurationInt64) ItemsToPrune(count uint32) *ConfigurationInt64
- func (c *ConfigurationInt64) MaxSize(max int64) *ConfigurationInt64
- func (c *ConfigurationInt64) OnDelete(callback func(item *ItemInt64)) *ConfigurationInt64
- func (c *ConfigurationInt64) PromoteBuffer(size uint32) *ConfigurationInt64
- func (c *ConfigurationInt64) Track() *ConfigurationInt64
- type Item
- type ItemInt64
- func (i *ItemInt64) Expired() bool
- func (i *ItemInt64) Expires() time.Time
- func (i *ItemInt64) Extend(duration time.Duration)
- func (i *ItemInt64) IsExpired(now time.Time) bool
- func (i *ItemInt64) Key() int64
- func (i *ItemInt64) Release()
- func (i *ItemInt64) TTL() time.Duration
- func (i *ItemInt64) Value() interface{}
- type LayeredCache
- func (c *LayeredCache) Clear()
- func (c *LayeredCache) Delete(primary, secondary string) bool
- func (c *LayeredCache) DeleteAll(primary string) bool
- func (c *LayeredCache) DeleteFunc(primary string, matches func(key string, item *Item) bool) int
- func (c *LayeredCache) DeletePrefix(primary, prefix string) int
- func (c *LayeredCache) Fetch(primary, secondary string, duration time.Duration, ...) (*Item, error)
- func (c *LayeredCache) Get(primary, secondary string) *Item
- func (c *LayeredCache) GetDropped() int
- func (c *LayeredCache) GetOrCreateSecondaryCache(primary string) *SecondaryCache
- func (c *LayeredCache) ItemCount() int
- func (c *LayeredCache) Replace(primary, secondary string, value interface{}) bool
- func (c *LayeredCache) Set(primary, secondary string, value interface{}, duration time.Duration)
- func (c *LayeredCache) SetMaxSize(size int64)
- func (c *LayeredCache) Stop()
- func (c *LayeredCache) TrackingGet(primary, secondary string) TrackedItem
- func (c *LayeredCache) TrackingSet(primary, secondary string, value interface{}, duration time.Duration) TrackedItem
- type SecondaryCache
- func (s *SecondaryCache) Delete(secondary string) bool
- func (s *SecondaryCache) Fetch(secondary string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error)
- func (s *SecondaryCache) Get(secondary string) *Item
- func (s *SecondaryCache) Replace(secondary string, value interface{}) bool
- func (s *SecondaryCache) Set(secondary string, value interface{}, duration time.Duration) *Item
- func (c *SecondaryCache) TrackingGet(secondary string) TrackedItem
- type Sized
- type TrackedItem
Constants ¶
This section is empty.
Variables ¶
var NilTracked = new(nilItem)
Functions ¶
func BitHighestInt64 ¶
func NormalTo2N ¶
Types ¶
type Cache ¶
type Cache struct { *Configuration // contains filtered or unexported fields }
func New ¶
func New(config *Configuration) *Cache
Create a new cache with the specified configuration See ccache.Configure() for creating a configuration
func (*Cache) Delete ¶
Remove the item from the cache, return true if the item was present, false otherwise.
func (*Cache) DeleteFunc ¶
Deletes all items that the matches func evaluates to true.
func (*Cache) DeletePrefix ¶
func (*Cache) Fetch ¶
func (c *Cache) Fetch(key string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error)
Attempts to get the value from the cache and calles fetch on a miss (missing or stale item). If fetch returns an error, no value is cached and the error is returned back to the caller.
func (*Cache) Get ¶
Get an item from the cache. Returns nil if the item wasn't found. This can return an expired item. Use item.Expired() to see if the item is expired and item.TTL() to see how long until the item expires (which will be negative for an already expired item).
func (*Cache) GetDropped ¶
Gets the number of items removed from the cache due to memory pressure since the last time GetDropped was called
func (*Cache) GetIncrVal ¶
func (*Cache) GetItemWithNow ¶
return item and expired
func (*Cache) GetWithNow ¶
return item and expired
func (*Cache) GetWithNowNoPromote ¶
return item and expired
func (*Cache) IncrNowPromote ¶
func (*Cache) IncrPromote ¶
incr and then renew ttl
func (*Cache) Replace ¶
Replace the value if it exists, does not set if it doesn't. Returns true if the item existed an was replaced, false otherwise. Replace does not reset item's TTL
func (*Cache) SetMaxSize ¶
Sets a new max size. That can result in a GC being run if the new maxium size is smaller than the cached size
func (*Cache) SetWithDeadline ¶
func (*Cache) Stop ¶
func (c *Cache) Stop()
Stops the background worker. Operations performed on the cache after Stop is called are likely to panic
func (*Cache) TrackingGet ¶
func (c *Cache) TrackingGet(key string) TrackedItem
Used when the cache was created with the Track() configuration option. Avoid otherwise
func (*Cache) TrackingSet ¶
func (c *Cache) TrackingSet(key string, value interface{}, duration time.Duration) TrackedItem
Used when the cache was created with the Track() configuration option. Sets the item, and returns a tracked reference to it.
type CacheInt64 ¶
type CacheInt64 struct { *ConfigurationInt64 // contains filtered or unexported fields }
The cache has a generic 'control' channel that is used to send messages to the worker. These are the messages that can be sent to it
func NewCacheInt64 ¶
func NewCacheInt64(config *ConfigurationInt64) *CacheInt64
Create a new cache with the specified configuration See ccache.Configure() for creating a configuration
func (*CacheInt64) Delete ¶
func (c *CacheInt64) Delete(key int64) bool
Remove the item from the cache, return true if the item was present, false otherwise.
func (*CacheInt64) DeleteFunc ¶
func (c *CacheInt64) DeleteFunc(matches func(key int64, item *ItemInt64) bool) int
Deletes all items that the matches func evaluates to true.
func (*CacheInt64) DeletePrefix ¶
func (c *CacheInt64) DeletePrefix(prefix int64) int
func (*CacheInt64) Fetch ¶
func (c *CacheInt64) Fetch(key int64, duration time.Duration, fetch func() (interface{}, error)) (*ItemInt64, error)
Attempts to get the value from the cache and calles fetch on a miss (missing or stale item). If fetch returns an error, no value is cached and the error is returned back to the caller.
func (*CacheInt64) Get ¶
func (c *CacheInt64) Get(key int64) *ItemInt64
Get an item from the cache. Returns nil if the item wasn't found. This can return an expired item. Use item.Expired() to see if the item is expired and item.TTL() to see how long until the item expires (which will be negative for an already expired item).
func (*CacheInt64) GetDropped ¶
func (c *CacheInt64) GetDropped() int
Gets the number of items removed from the cache due to memory pressure since the last time GetDropped was called
func (*CacheInt64) GetIncrVal ¶
func (c *CacheInt64) GetIncrVal(key int64) (r int64)
func (*CacheInt64) GetItem ¶
func (c *CacheInt64) GetItem(key int64) *ItemInt64
func (*CacheInt64) GetItemWithNow ¶
func (*CacheInt64) GetWithNow ¶
func (c *CacheInt64) GetWithNow(key int64, now time.Time) *ItemInt64
func (*CacheInt64) GetWithNowNoPromote ¶
return item and expired
func (*CacheInt64) IncrNowPromote ¶
func (*CacheInt64) IncrPromote ¶
incr and then renew ttl
func (*CacheInt64) ItemCount ¶
func (c *CacheInt64) ItemCount() int
func (*CacheInt64) Promote ¶
func (c *CacheInt64) Promote(item *ItemInt64)
func (*CacheInt64) Replace ¶
func (c *CacheInt64) Replace(key int64, value interface{}) bool
Replace the value if it exists, does not set if it doesn't. Returns true if the item existed an was replaced, false otherwise. Replace does not reset item's TTL
func (*CacheInt64) Set ¶
func (c *CacheInt64) Set(key int64, value interface{}, duration time.Duration)
Set the value in the cache for the specified duration
func (*CacheInt64) SetMaxSize ¶
func (c *CacheInt64) SetMaxSize(size int64)
Sets a new max size. That can result in a GC being run if the new maxium size is smaller than the cached size
func (*CacheInt64) SetWithDeadline ¶
func (c *CacheInt64) SetWithDeadline(key int64, value interface{}, deadline time.Time)
func (*CacheInt64) Stop ¶
func (c *CacheInt64) Stop()
Stops the background worker. Operations performed on the cache after Stop is called are likely to panic
func (*CacheInt64) TrackingGet ¶
func (c *CacheInt64) TrackingGet(key int64) TrackedItem
Used when the cache was created with the Track() configuration option. Avoid otherwise
func (*CacheInt64) TrackingSet ¶
func (c *CacheInt64) TrackingSet(key int64, value interface{}, duration time.Duration) TrackedItem
Used when the cache was created with the Track() configuration option. Sets the item, and returns a tracked reference to it.
type Configuration ¶
type Configuration struct {
// contains filtered or unexported fields
}
func Configure ¶
func Configure() *Configuration
Creates a configuration object with sensible defaults Use this as the start of the fluent configuration: e.g.: ccache.New(ccache.Configure().MaxSize(10000))
func (*Configuration) Buckets ¶
func (c *Configuration) Buckets(count uint32) *Configuration
Keys are hashed into % bucket count to provide greater concurrency (every set requires a write lock on the bucket). Must be a power of 2 (1, 2, 4, 8, 16, ...) [16]
func (*Configuration) DeleteBuffer ¶
func (c *Configuration) DeleteBuffer(size uint32) *Configuration
The size of the queue for items which should be deleted. If the queue fills up, calls to Delete() will block
func (*Configuration) GetsPerPromote ¶
func (c *Configuration) GetsPerPromote(count int32) *Configuration
Give a large cache with a high read / write ratio, it's usually unnecessary to promote an item on every Get. GetsPerPromote specifies the number of Gets a key must have before being promoted [3]
func (*Configuration) ItemsToPrune ¶
func (c *Configuration) ItemsToPrune(count uint32) *Configuration
The number of items to prune when memory is low [500]
func (*Configuration) MaxSize ¶
func (c *Configuration) MaxSize(max int64) *Configuration
The max size for the cache [5000]
func (*Configuration) OnDelete ¶
func (c *Configuration) OnDelete(callback func(item *Item)) *Configuration
OnDelete allows setting a callback function to react to ideam deletion. This typically allows to do a cleanup of resources, such as calling a Close() on cached object that require some kind of tear-down.
func (*Configuration) PromoteBuffer ¶
func (c *Configuration) PromoteBuffer(size uint32) *Configuration
The size of the queue for items which should be promoted. If the queue fills up, promotions are skipped [1024]
func (*Configuration) Track ¶
func (c *Configuration) Track() *Configuration
By turning tracking on and using the cache's TrackingGet, the cache won't evict items which you haven't called Release() on. It's a simple reference counter.
type ConfigurationInt64 ¶
type ConfigurationInt64 struct {
// contains filtered or unexported fields
}
func ConfigureInt64 ¶
func ConfigureInt64() *ConfigurationInt64
Creates a configuration object with sensible defaults Use this as the start of the fluent configuration: e.g.: ccache.New(ccache.Configure().MaxSize(10000))
func (*ConfigurationInt64) Buckets ¶
func (c *ConfigurationInt64) Buckets(count uint32) *ConfigurationInt64
Keys are hashed into % bucket count to provide greater concurrency (every set requires a write lock on the bucket). Must be a power of 2 (1, 2, 4, 8, 16, ...) [16]
func (*ConfigurationInt64) DeleteBuffer ¶
func (c *ConfigurationInt64) DeleteBuffer(size uint32) *ConfigurationInt64
The size of the queue for items which should be deleted. If the queue fills up, calls to Delete() will block
func (*ConfigurationInt64) GetsPerPromote ¶
func (c *ConfigurationInt64) GetsPerPromote(count int32) *ConfigurationInt64
Give a large cache with a high read / write ratio, it's usually unnecessary to promote an item on every Get. GetsPerPromote specifies the number of Gets a key must have before being promoted [3]
func (*ConfigurationInt64) ItemsToPrune ¶
func (c *ConfigurationInt64) ItemsToPrune(count uint32) *ConfigurationInt64
The number of items to prune when memory is low [500]
func (*ConfigurationInt64) MaxSize ¶
func (c *ConfigurationInt64) MaxSize(max int64) *ConfigurationInt64
The max size for the cache [5000]
func (*ConfigurationInt64) OnDelete ¶
func (c *ConfigurationInt64) OnDelete(callback func(item *ItemInt64)) *ConfigurationInt64
OnDelete allows setting a callback function to react to ideam deletion. This typically allows to do a cleanup of resources, such as calling a Close() on cached object that require some kind of tear-down.
func (*ConfigurationInt64) PromoteBuffer ¶
func (c *ConfigurationInt64) PromoteBuffer(size uint32) *ConfigurationInt64
The size of the queue for items which should be promoted. If the queue fills up, promotions are skipped [1024]
func (*ConfigurationInt64) Track ¶
func (c *ConfigurationInt64) Track() *ConfigurationInt64
By turning tracking on and using the cache's TrackingGet, the cache won't evict items which you haven't called Release() on. It's a simple reference counter.
type LayeredCache ¶
type LayeredCache struct { *Configuration // contains filtered or unexported fields }
func Layered ¶
func Layered(config *Configuration) *LayeredCache
See ccache.Configure() for creating a configuration
func (*LayeredCache) Delete ¶
func (c *LayeredCache) Delete(primary, secondary string) bool
Remove the item from the cache, return true if the item was present, false otherwise.
func (*LayeredCache) DeleteAll ¶
func (c *LayeredCache) DeleteAll(primary string) bool
Deletes all items that share the same primary key
func (*LayeredCache) DeleteFunc ¶
Deletes all items that share the same primary key and where the matches func evaluates to true.
func (*LayeredCache) DeletePrefix ¶
func (c *LayeredCache) DeletePrefix(primary, prefix string) int
Deletes all items that share the same primary key and prefix.
func (*LayeredCache) Fetch ¶
func (c *LayeredCache) Fetch(primary, secondary string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error)
Attempts to get the value from the cache and calles fetch on a miss. If fetch returns an error, no value is cached and the error is returned back to the caller.
func (*LayeredCache) Get ¶
func (c *LayeredCache) Get(primary, secondary string) *Item
Get an item from the cache. Returns nil if the item wasn't found. This can return an expired item. Use item.Expired() to see if the item is expired and item.TTL() to see how long until the item expires (which will be negative for an already expired item).
func (*LayeredCache) GetDropped ¶
func (c *LayeredCache) GetDropped() int
Gets the number of items removed from the cache due to memory pressure since the last time GetDropped was called
func (*LayeredCache) GetOrCreateSecondaryCache ¶
func (c *LayeredCache) GetOrCreateSecondaryCache(primary string) *SecondaryCache
Get the secondary cache for a given primary key. This operation will never return nil. In the case where the primary key does not exist, a new, underlying, empty bucket will be created and returned.
func (*LayeredCache) ItemCount ¶
func (c *LayeredCache) ItemCount() int
func (*LayeredCache) Replace ¶
func (c *LayeredCache) Replace(primary, secondary string, value interface{}) bool
Replace the value if it exists, does not set if it doesn't. Returns true if the item existed an was replaced, false otherwise. Replace does not reset item's TTL nor does it alter its position in the LRU
func (*LayeredCache) Set ¶
func (c *LayeredCache) Set(primary, secondary string, value interface{}, duration time.Duration)
Set the value in the cache for the specified duration
func (*LayeredCache) SetMaxSize ¶
func (c *LayeredCache) SetMaxSize(size int64)
Sets a new max size. That can result in a GC being run if the new maxium size is smaller than the cached size
func (*LayeredCache) Stop ¶
func (c *LayeredCache) Stop()
func (*LayeredCache) TrackingGet ¶
func (c *LayeredCache) TrackingGet(primary, secondary string) TrackedItem
Used when the cache was created with the Track() configuration option. Avoid otherwise
func (*LayeredCache) TrackingSet ¶
func (c *LayeredCache) TrackingSet(primary, secondary string, value interface{}, duration time.Duration) TrackedItem
Set the value in the cache for the specified duration
type SecondaryCache ¶
type SecondaryCache struct {
// contains filtered or unexported fields
}
func (*SecondaryCache) Delete ¶
func (s *SecondaryCache) Delete(secondary string) bool
Delete a secondary key. The semantics are the same as for LayeredCache.Delete
func (*SecondaryCache) Fetch ¶
func (s *SecondaryCache) Fetch(secondary string, duration time.Duration, fetch func() (interface{}, error)) (*Item, error)
Fetch or set a secondary key. The semantics are the same as for LayeredCache.Fetch
func (*SecondaryCache) Get ¶
func (s *SecondaryCache) Get(secondary string) *Item
Get the secondary key. The semantics are the same as for LayeredCache.Get
func (*SecondaryCache) Replace ¶
func (s *SecondaryCache) Replace(secondary string, value interface{}) bool
Replace a secondary key. The semantics are the same as for LayeredCache.Replace
func (*SecondaryCache) Set ¶
func (s *SecondaryCache) Set(secondary string, value interface{}, duration time.Duration) *Item
Set the secondary key to a value. The semantics are the same as for LayeredCache.Set
func (*SecondaryCache) TrackingGet ¶
func (c *SecondaryCache) TrackingGet(secondary string) TrackedItem
Track a secondary key. The semantics are the same as for LayeredCache.TrackingGet