Documentation ¶
Overview ¶
Package cache offers a library for managing caches in a unified manner in Go.
This package enables developers to transition between various cache implementations (such as Redis, Redis Cluster, Memcache, etc.) by altering the URL scheme. This is achieved by offering consistent, idiomatic interfaces for common operations.
Central to this package are "portable types", built atop service-specific drivers for supported cache services. For instance, the GenericCache type is a portable type that implements the driver.Cache interface. This allows developers to use the same code with different cache implementations.
URL Format ¶
The cache package uses URLs to specify cache implementations. The URL scheme is used to determine the cache implementation to use. The URL format is:
scheme://<host>:<port>[?query]
The scheme is used to determine the cache implementation. The host and port are used to connect to the cache service. The optional query parameters can be used to configure the cache implementation. Each cache implementation supports different query parameters.
Usage ¶
To use a cache implementation, import the relevant driver package and use the OpenCache function to create a new cache. The cache package will automatically use the correct cache implementation based on the URL scheme.
import ( "context" "log" "github.com/bartventer/gocache" // Enable the Redis cache implementation _ "github.com/bartventer/gocache/redis" ) func main() { ctx := context.Background() urlStr := "redis://localhost:7000?maxretries=5&minretrybackoff=1000" c, err := cache.OpenCache[string](ctx, urlStr) if err != nil { log.Fatalf("Failed to initialize cache: %v", err) } // Now you can use c with the cache.Cache interface err = c.Set(ctx, "key", "value") if err != nil { log.Fatalf("Failed to set key: %v", err) } value, err := c.Get(ctx, "key") if err != nil { log.Fatalf("Failed to get key: %v", err) } log.Printf("Value: %s", value) }
Drivers ¶
For specific URL formats, query parameters, and examples, refer to the documentation of each cache implementation.
Custom Key Types ¶
The cache package supports any string-like type for keys. Custom key types can be used by registering it alongside the cache implementation with RegisterCache. This allows the cache package to automatically convert the custom key type to a string when interacting with the cache.
The following key types are supported by default:
- string
- keymod.Key
For an example of how to register a custom key type, refer to the redis driver package.
Index ¶
- Variables
- func RegisterCache[K driver.String](scheme string, opener URLOpener[K])
- func ValidateTTL(ttl time.Duration) error
- type Cache
- type GenericCache
- func (c *GenericCache[K]) Clear(ctx context.Context) error
- func (c *GenericCache[K]) Close() error
- func (c *GenericCache[K]) Count(ctx context.Context, pattern K) (int64, error)
- func (c *GenericCache[K]) Del(ctx context.Context, key K) error
- func (c *GenericCache[K]) DelKeys(ctx context.Context, pattern K) error
- func (c *GenericCache[K]) Exists(ctx context.Context, key K) (bool, error)
- func (c *GenericCache[K]) Get(ctx context.Context, key K) ([]byte, error)
- func (c *GenericCache[K]) Ping(ctx context.Context) error
- func (c *GenericCache[K]) Set(ctx context.Context, key K, value interface{}) error
- func (c *GenericCache[K]) SetWithTTL(ctx context.Context, key K, value interface{}, ttl time.Duration) error
- type KeyCache
- type URLOpener
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNoCache is returned when no cache implementation is available. ErrNoCache = errors.New("gocache: no cache implementation available") // ErrKeyNotFound is returned when a key is not found in the cache. ErrKeyNotFound = errors.New("gocache: key not found") // ErrPatternMatchingNotSupported is returned when a pattern matching operation is not supported // by the cache implementation. ErrPatternMatchingNotSupported = errors.New("gocache: pattern matching not supported") // ErrInvalidTTL is returned when an invalid TTL is provided. ErrInvalidTTL = errors.New("gocache: invalid TTL") )
Functions ¶
func RegisterCache ¶
RegisterCache registers a URLOpener for a given scheme and type. If a URLOpener is already registered for the scheme and type, it panics. Not intended for direct application use.
func ValidateTTL ¶ added in v0.10.0
ValidateTTL validates the TTL and returns an error if it's invalid. A TTL is invalid if it's negative.
Types ¶
type Cache ¶
type Cache = GenericCache[string]
Cache is a type alias for GenericCache with string keys.
type GenericCache ¶ added in v0.15.0
GenericCache is a portable type that implements driver.Cache.
func NewCache ¶ added in v0.14.0
func NewCache[K driver.String](driver driver.Cache[K]) *GenericCache[K]
NewCache creates a new GenericCache using the provided driver. Not intended for direct application use.
func OpenGenericCache ¶ added in v0.15.0
func OpenGenericCache[K driver.String](ctx context.Context, urlstr string) (*GenericCache[K], error)
OpenGenericCache opens a GenericCache for the provided URL string and type. It returns an error if the URL cannot be parsed, or if no URLOpener is registered for the URL's scheme and type. Not intended for direct application use.
func (*GenericCache[K]) Clear ¶ added in v0.15.0
func (c *GenericCache[K]) Clear(ctx context.Context) error
Clear implements driver.Cache.
func (*GenericCache[K]) Close ¶ added in v0.15.0
func (c *GenericCache[K]) Close() error
Close implements driver.Cache.
func (*GenericCache[K]) Count ¶ added in v0.15.0
func (c *GenericCache[K]) Count(ctx context.Context, pattern K) (int64, error)
Count implements driver.Cache.
func (*GenericCache[K]) Del ¶ added in v0.15.0
func (c *GenericCache[K]) Del(ctx context.Context, key K) error
Del implements driver.Cache.
func (*GenericCache[K]) DelKeys ¶ added in v0.15.0
func (c *GenericCache[K]) DelKeys(ctx context.Context, pattern K) error
DelKeys implements driver.Cache.
func (*GenericCache[K]) Exists ¶ added in v0.15.0
func (c *GenericCache[K]) Exists(ctx context.Context, key K) (bool, error)
Exists implements driver.Cache.
func (*GenericCache[K]) Get ¶ added in v0.15.0
func (c *GenericCache[K]) Get(ctx context.Context, key K) ([]byte, error)
Get implements driver.Cache.
func (*GenericCache[K]) Ping ¶ added in v0.15.0
func (c *GenericCache[K]) Ping(ctx context.Context) error
Ping implements driver.Cache.
func (*GenericCache[K]) Set ¶ added in v0.15.0
func (c *GenericCache[K]) Set(ctx context.Context, key K, value interface{}) error
Set implements driver.Cache.
func (*GenericCache[K]) SetWithTTL ¶ added in v0.15.0
func (c *GenericCache[K]) SetWithTTL(ctx context.Context, key K, value interface{}, ttl time.Duration) error
SetWithTTL implements driver.Cache.
type KeyCache ¶ added in v0.15.0
type KeyCache = GenericCache[keymod.Key]
KeyCache is a type alias for GenericCache with keymod.Key keys.
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
gcerrors
Package gcerrors provides error handling for the gocache package.
|
Package gcerrors provides error handling for the gocache package. |
logext
Package logext provides a custom log.Logger interface for debug logging.
|
Package logext provides a custom log.Logger interface for debug logging. |
urlparser
Package urlparser provides utilities for parsing URL query parameters into a given struct.
|
Package urlparser provides utilities for parsing URL query parameters into a given struct. |
memcache
module
|
|
pkg
|
|
driver
Package driver defines an interface for cache implementations, providing a standardized way to interact with different caching mechanisms.
|
Package driver defines an interface for cache implementations, providing a standardized way to interact with different caching mechanisms. |
drivertest
Package drivertest provides conformance tests for cache implementations.
|
Package drivertest provides conformance tests for cache implementations. |
keymod
Package keymod provides functions for modifying keys.
|
Package keymod provides functions for modifying keys. |
ramcache
module
|
|
redis
module
|
|
rediscluster
module
|