synchronized LRUCacheEntry<SK, V> evict() {
      LRUCacheEntry<SK, V> cacheEntry;

      do {
        cacheEntry = tail.pre;
        if (cacheEntry == head) {
          return null;
        }

      } while (cacheEntry.isInvalidated.compareAndSet(false, true));

      cacheEntry.pre.next = cacheEntry.next;
      cacheEntry.next.pre = cacheEntry.pre;
      cacheEntry.next = null;
      cacheEntry.pre = null;
      return cacheEntry;
    }
This class implements the cache entry manager with LRU policy.

@param <FK> The first key of cache value.
@param <SK> The second key of cache value.
@param <V> The cache value.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/dualkeycache/impl/LRUCacheEntryManager.java