27134d5b0b782674fcf60dbb5c65dcd5
gin框架构建Api :缓存系统

我们构建一个缓存系统,目的是为了在api接口访问时走redis缓存加快速度,步骤如下:
1、通过主键(Id)先从redis读取数据,没有则从数据库回源
2、也可以根据'字段=>值'的形式 获取一条数据,根据字段=>值获取主键id,再重复第一步

目录

定义CacheDb interface接口

只要使用dbcache类的,都要满足这两个方法

type CacheDb interface {
    find(field string, value string) []interface{}
    findOne(field string, value string) interface{}
}

链接提示

model层

我们根据一个file-id获取数据库数据,建立video的model

func (v *Video) FindVideoByFileID(fileID string) (interface{}) {
    var video Video
    ormdb := &OrmDb{
        Model: &video,
        ClassName:"AppModelsVideo",
        Fields:map[string]string{
        },
    }
    result := ormdb.findOne("file_id",fileID)
    if _, ok := result.(*Video); ok {
           return result.(*Video)
    }else{
        return  result.(Video)
    }
}

var video Video使我们定义的数据库映射,OrmDb是下面dbcache类里面的结构体,只要你自己定义的model 实现了cache接口,就可以显式调用OrmDb(Model: &video)

type OrmDb struct {
    Model         CacheDb //接口
    ClassName     string //php中class名称用于redis设置key
    Fields        map[string]string //用作生产加密key
    ForeignFields []string //外键
    CacheKeyPreFix string
}

dbcache缓存、反射

一、第一次访问没有数据,数据库取出数据后set redis key,首先set主键数据

获取redis

func getRedis() redis.Conn {
    return system.RedisDB.Self.Get()
}

mysql获取数据

top Created with Sketch.