浏览代码

:art: 虚拟引用不再缓存关键字 Fix https://github.com/siyuan-note/siyuan/issues/6602

Liang Ding 2 年之前
父节点
当前提交
a1c74e4d90
共有 3 个文件被更改,包括 30 次插入0 次删除
  1. 1 0
      kernel/api/setting.go
  2. 6 0
      kernel/sql/block_ref_query.go
  3. 23 0
      kernel/sql/cache.go

+ 1 - 0
kernel/api/setting.go

@@ -215,6 +215,7 @@ func setSearch(c *gin.Context) {
 	if s.CaseSensitive != oldCaseSensitive {
 	if s.CaseSensitive != oldCaseSensitive {
 		model.FullReindex()
 		model.FullReindex()
 	}
 	}
+	sql.ClearVirtualRefKeywords()
 	ret.Data = s
 	ret.Data = s
 }
 }
 
 

+ 6 - 0
kernel/sql/block_ref_query.go

@@ -28,6 +28,11 @@ import (
 )
 )
 
 
 func QueryVirtualRefKeywords(name, alias, anchor, doc bool) (ret []string) {
 func QueryVirtualRefKeywords(name, alias, anchor, doc bool) (ret []string) {
+	ret, ok := getVirtualRefKeywordsCache()
+	if ok {
+		return ret
+	}
+
 	if name {
 	if name {
 		ret = append(ret, queryNames()...)
 		ret = append(ret, queryNames()...)
 	}
 	}
@@ -44,6 +49,7 @@ func QueryVirtualRefKeywords(name, alias, anchor, doc bool) (ret []string) {
 	sort.SliceStable(ret, func(i, j int) bool {
 	sort.SliceStable(ret, func(i, j int) bool {
 		return len(ret[i]) >= len(ret[j])
 		return len(ret[i]) >= len(ret[j])
 	})
 	})
+	setVirtualRefKeywords(ret)
 	return
 	return
 }
 }
 
 

+ 23 - 0
kernel/sql/cache.go

@@ -70,6 +70,29 @@ func removeBlockCache(id string) {
 	removeRefCacheByDefID(id)
 	removeRefCacheByDefID(id)
 }
 }
 
 
+func getVirtualRefKeywordsCache() ([]string, bool) {
+	if disabled {
+		return nil, false
+	}
+
+	if val, ok := memCache.Get("virtual_ref"); ok {
+		return val.([]string), true
+	}
+	return nil, false
+}
+
+func setVirtualRefKeywords(keywords []string) {
+	if disabled {
+		return
+	}
+
+	memCache.Set("virtual_ref", keywords, 1)
+}
+
+func ClearVirtualRefKeywords() {
+	memCache.Del("virtual_ref")
+}
+
 var defIDRefsCache = gcache.New(30*time.Minute, 5*time.Minute) // [defBlockID]map[refBlockID]*Ref
 var defIDRefsCache = gcache.New(30*time.Minute, 5*time.Minute) // [defBlockID]map[refBlockID]*Ref
 
 
 func GetRefsCacheByDefID(defID string) (ret []*Ref) {
 func GetRefsCacheByDefID(defID string) (ret []*Ref) {