github.com/charlienet/go-mixed@v0.3.7/cache/cache_builder.go (about) 1 package cache 2 3 import "github.com/charlienet/go-mixed/logx" 4 5 const defaultPrefix = "cache" 6 7 type option func(*Cache) error 8 9 type options struct { 10 Prefix string 11 } 12 13 func acquireDefaultCache() *Cache { 14 return &Cache{ 15 prefix: defaultPrefix, 16 qps: NewQps(), 17 } 18 } 19 20 type cacheBuilder struct { 21 prefix string 22 redisOptions RedisConfig 23 bigCacheConfig BigCacheConfig 24 freeSize int 25 publishSubscribe PublishSubscribe 26 log logx.Logger 27 } 28 29 func NewCacheBuilder() *cacheBuilder { 30 return &cacheBuilder{} 31 } 32 33 func (b *cacheBuilder) WithLogger(log logx.Logger) *cacheBuilder { 34 b.log = log 35 return b 36 } 37 38 func (b *cacheBuilder) WithPrefix(prefix string) *cacheBuilder { 39 b.prefix = prefix 40 return b 41 } 42 43 func (b *cacheBuilder) WithRedis(opts RedisConfig) *cacheBuilder { 44 b.redisOptions = opts 45 return b 46 } 47 48 func (b *cacheBuilder) WithBigCache(opts BigCacheConfig) *cacheBuilder { 49 b.bigCacheConfig = opts 50 return b 51 } 52 53 func (b *cacheBuilder) WithFreeCache(size int) *cacheBuilder { 54 b.freeSize = size 55 return b 56 } 57 58 // 使用自定义分布式缓存 59 func WithDistributedCache(c DistributdCache) { 60 61 } 62 63 func (b *cacheBuilder) WithPublishSubscribe(p PublishSubscribe) *cacheBuilder { 64 b.publishSubscribe = p 65 return b 66 } 67 68 func (b cacheBuilder) Build() (*Cache, error) { 69 var err error 70 cache := acquireDefaultCache() 71 if len(b.prefix) > 0 { 72 cache.prefix = b.prefix 73 } 74 75 b.redisOptions.Prefix = cache.prefix 76 77 redis := NewRedis(b.redisOptions) 78 if err := redis.Ping(); err != nil { 79 return cache, err 80 } 81 82 var mem MemCache 83 if b.freeSize > 0 { 84 mem = NewFreeCache(b.freeSize) 85 } else { 86 if b.log != nil { 87 b.bigCacheConfig.log = b.log 88 } 89 90 mem, err = NewBigCache(b.bigCacheConfig) 91 } 92 93 cache.distributdCache = redis 94 cache.mem = mem 95 cache.publishSubscribe = b.publishSubscribe 96 cache.logger = b.log 97 98 return cache, err 99 }