gfast 的数据缓存是使用了gf框架的 gcache 模块,进行了轻量的service封装,主要是添加了缓存标签支持,可以对同类型的数据定义一个标签,清除缓存时可以按照标签分类清除。

使用方式

例如用户权限的缓存,当缓存了用户权限的时候,我们在后台又修改过角色信息(角色重新授权),修改了用户信息(用户重新设置了所属角色)后就需要清空旧的缓存生成新的缓存,就可以使用缓存标签将角色和用户的增删改设置同一个标签,在清除缓存的时候只清理权限相关的标签,不影响其他模块缓存数据。

示例代码:

import "gfast/app/service/cache_service"
//获取所有菜单并缓存
func GetMenuList() (list []*Entity, err error) {
    cache := cache_service.New()
    //从缓存获取
    iList := cache.Get(cache_service.AdminAuthMenu)
    if iList != nil {
        list = iList.([]*Entity)
        return
    }
    //从数据库获取
    list, err = Model.Order("weigh desc,id asc").FindAll()
    if err != nil {
        return
    }
    //缓存菜单 最后一个参数cache_service.AdminAuthTag就是设置缓存标签的名称
    cache.Set(cache_service.AdminAuthMenu, list, 0, cache_service.AdminAuthTag)
    return
}
//获取用户组(角色)列表并缓存
func GetList() (list []*Entity, err error) {
    cache := cache_service.New()
    //从缓存获取
    iList := cache.Get(cache_service.AdminAuthRole)
    if iList != nil {
        list = iList.([]*Entity)
        return
    }
    //从数据库获取
    list, err = Model.OrderBy("list_order asc,id asc").All()
    //缓存数据 和获取菜单时使用的是同一个缓存标签
    cache.Set(cache_service.AdminAuthRole, list, 0, cache_service.AdminAuthTag)
    return
}
//当修改了角色后通过缓存标签删除和权限相关的缓存数据
func (c *Auth) EditRole(r *ghttp.Request) {
    id := r.GetRequestInt64("roleId")
    //获取表单提交的数据
    ...
    //修改角色信息
    ...
    //添加角色权限
    ...
    //清除TAG缓存
    cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
    response.SusJson(true, r, "修改用户组成功")
}

同时对应的缓存标签为了好维护,可以设置对应的常量来区分:

package cache_service

//缓存前缀KEY
const (
    AdminAuthMenu = iota
    AdminAuthRole
    AdminCmsMenu
    AdminConfigDict
    GovProject
)

//缓存TAG标签
const (
    AdminAuthTag = iota
    AdminCmsTag
    AdminSysConfigTag
    AdminModelTag
    AdminDeptUserTag
    GovProjectCateTag
)
作者:管理员  创建时间:2023-01-09 16:44
最后编辑:管理员  更新时间:2023-01-09 16:44