github.com/decred/dcrlnd@v0.7.6/channeldb/channel_cache.go (about) 1 package channeldb 2 3 // channelCache is an in-memory cache used to improve the performance of 4 // ChanUpdatesInHorizon. It caches the chan info and edge policies for a 5 // particular channel. 6 type channelCache struct { 7 n int 8 channels map[uint64]ChannelEdge 9 } 10 11 // newChannelCache creates a new channelCache with maximum capacity of n 12 // channels. 13 func newChannelCache(n int) *channelCache { 14 return &channelCache{ 15 n: n, 16 channels: make(map[uint64]ChannelEdge), 17 } 18 } 19 20 // get returns the channel from the cache, if it exists. 21 func (c *channelCache) get(chanid uint64) (ChannelEdge, bool) { 22 channel, ok := c.channels[chanid] 23 return channel, ok 24 } 25 26 // insert adds the entry to the channel cache. If an entry for chanid already 27 // exists, it will be replaced with the new entry. If the entry doesn't exist, 28 // it will be inserted to the cache, performing a random eviction if the cache 29 // is at capacity. 30 func (c *channelCache) insert(chanid uint64, channel ChannelEdge) { 31 // If entry exists, replace it. 32 if _, ok := c.channels[chanid]; ok { 33 c.channels[chanid] = channel 34 return 35 } 36 37 // Otherwise, evict an entry at random and insert. 38 if len(c.channels) == c.n { 39 for id := range c.channels { 40 delete(c.channels, id) 41 break 42 } 43 } 44 c.channels[chanid] = channel 45 } 46 47 // remove deletes an edge for chanid from the cache, if it exists. 48 func (c *channelCache) remove(chanid uint64) { 49 delete(c.channels, chanid) 50 }