Class DoubleBarrelLRUCache<TKey, TValue>
Simple concurrent LRU cache, using a "double barrel"
approach where two ConcurrentHashMaps record entries.
At any given time, one hash is primary and the other
is secondary. Get(TKey) first checks primary, and if
that's a miss, checks secondary. If secondary has the
entry, it's promoted to primary (NOTE: the key is
cloned at this point). Once primary is full, the
secondary is cleared and the two are swapped.
This is not as space efficient as other possible
concurrent approaches (see LUCENE-2075): to achieve
perfect LRU(N) it requires 2*N storage. But, this
approach is relatively simple and seems in practice to
not grow unbounded in size when under hideously high
load.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Inheritance
System.Object
DoubleBarrelLRUCache<TKey, TValue>
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Assembly: Lucene.Net.dll
Syntax
public sealed class DoubleBarrelLRUCache<TKey, TValue> : DoubleBarrelLRUCache where TKey : DoubleBarrelLRUCache.CloneableKey
Type Parameters
Name |
Description |
TKey |
|
TValue |
|
Constructors
|
Improve this Doc
View Source
DoubleBarrelLRUCache(Int32)
Declaration
public DoubleBarrelLRUCache(int maxCount)
Parameters
Type |
Name |
Description |
System.Int32 |
maxCount |
|
Methods
|
Improve this Doc
View Source
Get(TKey)
Declaration
public TValue Get(TKey key)
Parameters
Type |
Name |
Description |
TKey |
key |
|
Returns
|
Improve this Doc
View Source
Put(TKey, TValue)
Declaration
public void Put(TKey key, TValue value)
Parameters
Type |
Name |
Description |
TKey |
key |
|
TValue |
value |
|