浏览代码

清除缓存

yxh 4 年之前
父节点
当前提交
242c6ae812
共有 3 个文件被更改,包括 41 次插入10 次删除
  1. 9 9
      app/common/global/cache_key.go
  2. 2 1
      app/common/service/cache.go
  3. 30 0
      app/system/api/cache.go

+ 9 - 9
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"
 )

+ 2 - 1
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))))
 	}
 }
 

+ 30 - 0
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, "缓存清除成功")
 }