diff --git a/app/common/global/cache_key.go b/app/common/global/cache_key.go index fc12dae..5f83e0b 100644 --- a/app/common/global/cache_key.go +++ b/app/common/global/cache_key.go @@ -1,22 +1,22 @@ package global const ( - //缓存前缀 - cachePrefix = "cacheV2_" + // CachePrefix 缓存前缀 + CachePrefix = "cacheV2_" // SysAuthMenu 缓存菜单KEY - SysAuthMenu = cachePrefix + "sysAuthMenu" + SysAuthMenu = CachePrefix + "sysAuthMenu" // SysDict 字典缓存菜单KEY - SysDict = cachePrefix + "sysDict" + SysDict = CachePrefix + "sysDict" // SysRole 角色缓存key - SysRole = cachePrefix + "sysRole" + SysRole = CachePrefix + "sysRole" // SysWebSet 站点配置缓存key - SysWebSet = cachePrefix + "sysWebSet" + SysWebSet = CachePrefix + "sysWebSet" // SysAuthTag 权限缓存TAG标签 - SysAuthTag = cachePrefix + "sysAuthTag" + SysAuthTag = CachePrefix + "sysAuthTag" // SysDictTag 字典缓存标签 - SysDictTag = cachePrefix + "sysDictTag" + SysDictTag = CachePrefix + "sysDictTag" // SysConfigTag 系统参数配置 - SysConfigTag = cachePrefix + "sysConfigTag" + SysConfigTag = CachePrefix + "sysConfigTag" ) diff --git a/app/common/service/cache.go b/app/common/service/cache.go index c3e3e6e..4a4d030 100644 --- a/app/common/service/cache.go +++ b/app/common/service/cache.go @@ -3,6 +3,7 @@ package service import ( "context" "fmt" + "gfast/app/common/global" "github.com/gogf/gcache-adapter/adapter" "github.com/gogf/gf/crypto/gmd5" "github.com/gogf/gf/encoding/gjson" @@ -73,7 +74,7 @@ func (c *cacheTagService) cacheTagKey(key interface{}, tag interface{}) { //获取带标签的键名 func (c *cacheTagService) setTagKey(tag interface{}) { if tag != nil { - c.tagKey = interface{}(fmt.Sprintf("cache_tag_%s", gmd5.MustEncryptString(gconv.String(tag)))) + c.tagKey = interface{}(fmt.Sprintf("%s_tag_%s", global.CachePrefix, gmd5.MustEncryptString(gconv.String(tag)))) } } diff --git a/app/system/api/cache.go b/app/system/api/cache.go index 1b7aed6..cfc12b8 100644 --- a/app/system/api/cache.go +++ b/app/system/api/cache.go @@ -11,7 +11,10 @@ import ( "gfast/app/common/api" "gfast/app/common/global" commService "gfast/app/common/service" + "github.com/gogf/gf/encoding/gbase64" + "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" + "github.com/gogf/gf/util/gconv" ) type cache struct { @@ -26,5 +29,32 @@ func (c *cache) Clear(r *ghttp.Request) { cs.RemoveByTag(global.SysAuthTag) cs.RemoveByTag(global.SysDictTag) cs.RemoveByTag(global.SysConfigTag) + cacheRedis := g.Cfg().GetBool("redis.open") + if cacheRedis { + cursor := 0 + for { + v, err := g.Redis().DoVar("scan", cursor, "match", global.CachePrefix+"*", "count", "100") + if err != nil { + c.FailJsonExit(r, err.Error()) + } + data := gconv.SliceAny(v) + var dataSlice []string + err = gconv.Structs(data[1], &dataSlice) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + for _, d := range dataSlice { + dk := gbase64.MustDecodeToString(d) + _, err = g.Redis().DoVar("del", dk) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + } + cursor = gconv.Int(data[0]) + if cursor == 0 { + break + } + } + } c.SusJsonExit(r, "缓存清除成功") }