[go: up one dir, main page]

Skip to content

MoeYang/go-localcache

Repository files navigation

A mem-cached library by golang.

Why choose go-localcache ?

1、Support to set different TTL for every key

2、LRU policy to delete useless keys

3、Similar performance like sync.Map -> see bench_test

How to use

	cache := localcache.NewLocalCache(
		localcache.WithCapacity(1024), // WithShardCount set max Capacity
		localcache.WithShardCount(256),// WithShardCount shardCnt must be a power of 2
		localcache.WithGlobalTTL(120), // WithGlobalTTL set all keys default expire time of seconds
		localcache.WithStatist(true),  // WithStatist set whether need to caculate the cache stastic
		localcache.WithPolicy(localcache.PolicyTypeLRU), // WithPolicy set the elimination policy of key
	)
	
	// Get a key and return the value and if the key exists
	cache.Get(key string) (interface{}, bool)

	// GetOrLoad get a key, while key not exists, call f() to load data, and will set the load data to cache.
	// Load data process will called singleFlight called 
	cache.GetOrLoad(key string, f LoadFunc) (interface{}, error)

	// Set a key-value with default seconds to live
	cache.Set(key string, value interface{})
	
	// SetWithExpire set a key-value with seconds to live
	cache.SetWithExpire(key string, value interface{}, ttl int64)
	
	// Del delete key and return if the key exists
	cache.Del(key string) bool
	
	// Len return count of keys in cache
	cache.Len() int
	
	// Flush clear all keys in chache, should do this when set and del is stop
	cache.Flush()
	
	// Stop the cacheProcess by close stopChan
	cache.Stop()

	// Statistic return cache Statics {"hit":1, "miss":1, "hitRate":50.0}
	Statistic() map[string]interface{}