gfast 的数据缓存是使用了gf框架的 gcache 模块,进行了轻量的service封装,主要是添加了缓存标签支持,可以对同类型的数据定义一个标签,清除缓存时可以按照标签分类清除。
使用方式
例如用户权限的缓存,当缓存了用户权限的时候,我们在后台又修改过角色信息(角色重新授权),修改了用户信息(用户重新设置了所属角色)后就需要清空旧的缓存生成新的缓存,就可以使用缓存标签将角色和用户的增删改设置同一个标签,在清除缓存的时候只清理权限相关的标签,不影响其他模块缓存数据。
示例代码:
import "gfast/app/common/service"
//获取所有菜单并缓存
func (s *rule) GetMenuList() (list []*model.SysAuthRuleInfoRes, err error) {
cache := service.Cache.New()
//从缓存获取
iList := cache.Get(global.SysAuthMenu)
if iList != nil {
err = gconv.Struct(iList, &list)
return
}
//从数据库获取
list, err = dao.SysAuthRule.GetMenuList()
if err != nil || list == nil {
return
}
//缓存菜单
cache.Set(global.SysAuthMenu, list, 0, global.SysAuthTag)
return
}
// GetRoleList 获取角色列表
func (s *sysRole) GetRoleList() (list []*model.SysRole, err error) {
cache := service.Cache.New()
//从缓存获取
iList := cache.Get(global.SysRole)
if iList != nil {
err = gconv.Struct(iList, &list)
return
}
//从数据库获取
list, err = dao.SysRole.Order(dao.SysRole.Columns.ListOrder + " asc," + dao.SysRole.Columns.Id + " asc").All()
if err != nil {
g.Log().Error(err)
err = gerror.New("获取角色数据失败")
}
//缓存数据
cache.Set(global.SysRole, list, 0, global.SysAuthTag)
iList = cache.Get(global.SysRole)
return
}
* 可以看到上面我们都使用同一个缓存标签global.SysAuthTag
这样当我们修改了用户信息,或者角色,或者菜单信息后,就不用依次去根据缓存键去删除缓存的菜单、角色等信息,只要通过这个标签就能一次性更新这几个缓存数据。*
//当修改了角色后通过缓存标签删除和权限相关的缓存数据
func (s *sysRole) EditRolePost(m map[string]interface{}, id int) error {
tx, err := g.DB("default").Begin() //开启事务
if err != nil {
return err
}
err = s.EditRole(tx, m)
if err != nil {
tx.Rollback()
return err
}
err = s.EditRoleRule(m["menuIds"], int64(id))
if err != nil {
tx.Rollback() //回滚
return err
}
tx.Commit()
//清除TAG缓存
service.Cache.New().RemoveByTag(global.SysAuthTag)
return nil
}
同时对应的缓存标签为了好维护,可以设置对应的常量来区分:
package global
const (
//缓存前缀
cachePrefix = "cache_" //缓存前缀可以用来区分在同一台服务器环境部署多个系统缓存数据(防止缓存混淆)
// SysAuthMenu 缓存菜单KEY
SysAuthMenu = cachePrefix + "sysAuthMenu"
// SysDict 字典缓存菜单KEY
SysDict = cachePrefix + "sysDict"
// SysRole 角色缓存key
SysRole = cachePrefix + "sysRole"
// SysWebSet 站点配置缓存key
SysWebSet = cachePrefix + "sysWebSet"
// SysAuthTag 权限缓存TAG标签
SysAuthTag = cachePrefix + "sysAuthTag"
// SysDictTag 字典缓存标签
SysDictTag = cachePrefix + "sysDictTag"
// SysConfigTag 系统参数配置
SysConfigTag = cachePrefix + "sysConfigTag"
)
数据缓存配置
# Redis数据库配置
[redis]
open = true #是否开启 redis 缓存 若不开启使用gchache缓存方式
default = "127.0.0.1:6379,9?idleTimeout=600"
作者:管理员 创建时间:2023-01-09 17:14
最后编辑:管理员 更新时间:2023-01-09 17:15
最后编辑:管理员 更新时间:2023-01-09 17:15