func NewIndexer(keyFunc KeyFunc, indexers Indexers) Indexer {
return &cache{
cacheStorage: NewThreadSafeStore(indexers, Indices{}),
keyFunc: keyFunc,
}
}
keyFunc是DeletionHandlingMetaNamespaceKeyFunc,按照meta.GetNamespace() + “/“ + meta.GetName()
threadSafeMap 是 ThreadSafeStore的实现
threadSafeMap中:
type threadSafeMap struct {
lock sync.RWMutex
items map[string]interface{} key是keyFunc算出来,value就是informer监听的对象
// indexers maps a name to an IndexFunc
_indexers Indexers 存储了所有的IndexFunc
// indices maps a name to an Index _
indices Indices 存储了所有IndexFunc的结果
}
Indices 是两层 map
第一层,key是index name
第二层,key是根据IndexFunc算出来的一个结果,value是一个set,是keyFunc算出来的值的集合 (value中每一个值都是可以从items中查询到结果的)