Documentation
¶
Overview ¶
Package cache 提供通用缓存驱动接口
Package cache 提供基于 Redis 的缓存驱动实现。 包含分布式锁(非阻塞/阻塞)、缓存读写、批量操作、批量删除、占位符以及操作日志等能力。
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ErrPlaceholder 表示缓存命中了占位符(表示数据不存在)。 ErrPlaceholder = errors.New("cache: placeholder hit") // NotFoundPlaceholder 占位符的具体值,用于标记空数据。 NotFoundPlaceholder = "*" // DefaultNotFoundExpireTime 占位符的默认过期时间。 DefaultNotFoundExpireTime = time.Minute * 1 )
View Source
var CacheNotFound = redis.Nil
CacheNotFound 表示 Redis 中 key 不存在的错误(由 go-redis 返回的 redis.Nil)
Functions ¶
Types ¶
type Cache ¶
type Cache interface {
// GetLoopLock 获取一个阻塞式的分布式锁(循环等待直到获取锁或上下文取消)。
GetLoopLock(ctx context.Context, key string, options ...redsync.Option) (*redsync.Mutex, error)
// GetLock 获取一个非阻塞的分布式锁(尝试一次,失败立即返回错误)。
GetLock(ctx context.Context, key string, options ...redsync.Option) (*redsync.Mutex, error)
// WatchDogLock 获取一个带看门狗自动续期的分布式锁(非阻塞)。
WatchDogLock(ctx context.Context, key string, expiry time.Duration, task func(ctx context.Context) error, options ...redsync.Option) error
// WatchDogLoopLock 获取一个带看门狗自动续期的分布式锁(阻塞式)。
WatchDogLoopLock(ctx context.Context, key string, expiry time.Duration, task func(ctx context.Context) error, options ...redsync.Option) error
// Set 将一个值序列化后写入缓存,并设置过期时间。
Set(ctx context.Context, key string, val interface{}, expireTime time.Duration) error
// Get 从缓存中获取指定 key 的值,并反序列化到 val 中。
Get(ctx context.Context, key string, val interface{}) error
// Del 删除一个或多个缓存 key。
Del(ctx context.Context, keys ...string) error
// MultiSet 批量设置多个 key-value 到缓存。
MultiSet(ctx context.Context, valMap map[string]interface{}, expireTime time.Duration) error
// MultiGet 批量获取多个 key 的值,并填充到 valueMap 中。
MultiGet(ctx context.Context, keys []string, valueMap interface{}) error
// DelByPrefix 根据前缀批量删除缓存(使用 SCAN 遍历)。
DelByPrefix(ctx context.Context, prefix string) error
// SetCacheWithNotFound 为指定 key 设置占位符,防止缓存穿透。
SetCacheWithNotFound(ctx context.Context, key string) error
}
Cache 通用缓存接口(不依赖任何业务包)
func NewRedisCache ¶
func NewRedisCache(client *redis.Client, keyPrefix string, encode encoding.Encoding, newObject func() interface{}, _ ...NewRedisCacheOption) Cache
NewRedisCache 创建并返回一个新的 Redis 缓存驱动实例。 client: Redis 客户端;keyPrefix: 全局 key 前缀(通常为空);encode: 编码器;newObject: 对象工厂。 可选参数 _ 暂未使用。
type NewRedisCacheOption ¶ added in v1.3.26
type NewRedisCacheOption func(*redisCache)
NewRedisCacheOption 用于配置 NewRedisCache 的可选参数(目前未实现具体选项)
Click to show internal directories.
Click to hide internal directories.