change module name 22 очистка кэша при вставке и измении и удалении
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package linedb
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -94,6 +95,37 @@ func (c *RecordCache) Clear() {
|
||||
c.cache = make(map[string]*CacheEntry)
|
||||
}
|
||||
|
||||
// ClearCollection удаляет записи кэша, относящиеся к коллекции collectionName:
|
||||
// ключи ReadByFilter ("collection:filter" и "collection_part:filter") и SetByRecord ("id:collection", "id:collection_part").
|
||||
func (c *RecordCache) ClearCollection(collectionName string) {
|
||||
if collectionName == "" {
|
||||
c.Clear()
|
||||
return
|
||||
}
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
for key := range c.cache {
|
||||
if cacheKeyBelongsToCollection(key, collectionName) {
|
||||
delete(c.cache, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func cacheKeyBelongsToCollection(key, collectionName string) bool {
|
||||
if strings.HasPrefix(key, collectionName+":") {
|
||||
return true
|
||||
}
|
||||
if strings.HasPrefix(key, collectionName+"_") {
|
||||
return true
|
||||
}
|
||||
idx := strings.LastIndex(key, ":")
|
||||
if idx < 0 {
|
||||
return false
|
||||
}
|
||||
suf := key[idx+1:]
|
||||
return suf == collectionName || strings.HasPrefix(suf, collectionName+"_")
|
||||
}
|
||||
|
||||
// ClearEntriesContainingIDs удаляет из кэша только те записи, в данных которых
|
||||
// встречается хотя бы один из переданных id. Если ids пуст — ничего не делает.
|
||||
func (c *RecordCache) ClearEntriesContainingIDs(ids []any) {
|
||||
|
||||
Reference in New Issue
Block a user