Przeglądaj źródła

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

Liang Ding 2 lat temu
rodzic
commit
a1c74e4d90
3 zmienionych plików z 30 dodań i 0 usunięć
  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 {
 		model.FullReindex()
 	}
+	sql.ClearVirtualRefKeywords()
 	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) {
+	ret, ok := getVirtualRefKeywordsCache()
+	if ok {
+		return ret
+	}
+
 	if name {
 		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 {
 		return len(ret[i]) >= len(ret[j])
 	})
+	setVirtualRefKeywords(ret)
 	return
 }
 

+ 23 - 0
kernel/sql/cache.go

@@ -70,6 +70,29 @@ func removeBlockCache(id string) {
 	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
 
 func GetRefsCacheByDefID(defID string) (ret []*Ref) {