gin go 更新缓存_gin框架实践连载番外篇 | 3天打造专属Cache(First day)

本文介绍了如何使用Go语言的Gin框架构建一个灵活且高效的全局缓存管理器,支持多种缓存源。通过定义接口和适配器设计模式,实现了包括内存存储在内的缓存源注册和管理。文中提供了具体的代码示例,包括内存存储源的实现,以及如何使用这个缓存管理器进行操作,如设置、获取、删除缓存等。
摘要由CSDN通过智能技术生成

引言Cache实际上在项目很常见、常见的redis、memcached等等

为了减少代码修改,灵活切换缓存存储源

今天开始为期3天交大家,如何打造一款高效扩展性强的的Cache管理器

主要用来学习啊、共同进步

1、gocache设计理念全局缓存管理器

支持多个缓存源

interface定义接口,完美实现适配器设计模式

2、定义定义全局存储源

定义全局Cache管理器var Stores = make(map[string]StoreInterface)type Cache struct {

name  string

store StoreInterface

}复制代码定义store接口type StoreInterface interface {

GetStoreName() string// 获取缓存

Get(key string) (interface{}, error)// 设置缓存带过期时间

Set(key string, value interface{}, time int) error// 设置永久缓存无过期时间

Forever(key string, value interface{}) error// 删除key

Delete(key string) error// 判断key是否存在

Has(key string) error// 全部清空

Clear() error// 获取缓存key的数量

Size() int// 获取expire

GetTTl(key string) (time.Duration, error)// 随机删除已过期key

GC()

}复制代码定义实例化Cache方法func New(name string) (*Cache, error) {

name = strings.ToLower(name)if store, ok := Stores[name]; ok {go store.GC()return &Cache{

name:  name, //有点多余

store: store,

}, nil

} else {return nil, fmt.Errorf("Cache:unknown %s store please import", name)

}

}复制代码定义注册缓存源的方法 (忽略store名称大小写,都转成小写存储)func Register(name string, store StoreInterface) {if store == nil {

log.Panic("Cache: Register store is nil")

}

name = strings.ToLower(name)if _, ok := Stores[name]; ok {

log.Panic("Cache: Register store is exist")

}

Stores[name] = store

}复制代码定义Cache对外方法// 获取store名称func (c *Cache) GetStoreName() string {return c.store.GetStoreName()

}// 获取键值func (c *Cache) Get(key string) (interface

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值