简介

snow框架目前提供的缓存驱动,只支持redis,主要是因为公司业务特性,目前基本使用redis作为缓存服务,但是框架本身可支持扩展其他驱动。

核心包目录

github.com/qit-team/snow-core/cache

支持驱动

目前已支持redis驱动,可自行进行插件式扩展。

  1. _ "github.com/qit-team/snow-core/cache/rediscache"

缓存接口设计

  1. type Cache interface {
  2. Get(ctx context.Context, key string) (interface{}, error)
  3. GetMulti(ctx context.Context, keys ... string) (map[string]interface{}, error)
  4. Set(ctx context.Context, key string, value interface{}, ttl int) (bool, error)
  5. SetMulti(ctx context.Context, items map[string]interface{}, ttl int) (bool, error)
  6. Delete(ctx context.Context, key string) (bool, error)
  7. DeleteMulti(ctx context.Context, key ... string) (bool, error)
  8. Expire(ctx context.Context, key string, ttl int) (bool, error)
  9. IsExist(ctx context.Context, key string) (bool, error)
  10. }

驱动程序只需要实现上述的缓存接口,即可作为缓存驱动引入。同时在init函数中实现cache.Register(driverType, driver),可以实现插件式的扩展支持,可参考github.com/qit-team/snow-core/cache/rediscache实现。

获取Cache对象

  1. ## diName表示依赖注入别名;driverType表示驱动类型;
  2. cache.GetCache(diName, driverType)

这里需要注意一下,diName是所属底层驱动类型的依赖注入别名,如果底层驱动是redis,name就是使用我们在redis资源实例中使用的依赖注入别名。

使用规范

每一种业务类型的缓存,新建一个子目录,可以参考框架自带的app/caches/bannerlistcache,不同的业务统一在app/caches/cache_key.go目录定义缓存前缀的key,这样既可以实现不同业务间不会出现缓存key冲突。