@Override protected HeapNearCacheRecordMap<K, R> createNearCacheRecordMap(NearCacheConfig nearCacheConfig) { return new HeapNearCacheRecordMap<K, R>(serializationService, DEFAULT_INITIAL_CAPACITY); }
@Override protected boolean containsRecordKey(K key) { return records.containsKey(key); }
@Override public R getRecord(K key) { return records.get(key); }
@Override public void invalidate(K key) { records.applyIfPresent(key, invalidatorFunction); nearCacheStats.incrementInvalidationRequests(); }
@Override protected R removeRecord(K key) { R removedRecord = records.remove(key); if (canUpdateStats(removedRecord)) { nearCacheStats.decrementOwnedEntryMemoryCost(getTotalStorageMemoryCost(key, removedRecord)); } return removedRecord; }
@Override protected R putRecord(K key, R record) { R oldRecord = records.put(key, record); nearCacheStats.incrementOwnedEntryMemoryCost(getTotalStorageMemoryCost(key, record)); if (oldRecord != null) { nearCacheStats.decrementOwnedEntryMemoryCost(getTotalStorageMemoryCost(key, oldRecord)); } return oldRecord; }
@Override public void doExpiration() { for (Map.Entry<K, R> entry : records.entrySet()) { K key = entry.getKey(); R value = entry.getValue(); if (isRecordExpired(value)) { invalidate(key); onExpire(key, value); } } }
@Override public void storeKeys() { if (nearCachePreloader != null) { nearCachePreloader.storeKeys(records.keySet().iterator()); } }
@Override protected R getOrCreateToReserve(K key, Data keyData) { return records.applyIfAbsent(key, new ReserveForUpdateFunction(keyData)); }
@Override public void invalidate(K key) { records.applyIfPresent(key, invalidatorFunction); nearCacheStats.incrementInvalidationRequests(); }
@Override public <C extends EvictionCandidate<K, V>> boolean tryEvict(C evictionCandidate, EvictionListener<K, V> evictionListener) { if (evictionCandidate == null) { return false; } if (remove(evictionCandidate.getAccessor()) == null) { return false; } if (evictionListener != null) { evictionListener.onEvict(evictionCandidate.getAccessor(), evictionCandidate.getEvictable(), false); } return true; }
@Override protected R putRecord(K key, R record) { R oldRecord = records.put(key, record); nearCacheStats.incrementOwnedEntryMemoryCost(getTotalStorageMemoryCost(key, record)); if (oldRecord != null) { nearCacheStats.decrementOwnedEntryMemoryCost(getTotalStorageMemoryCost(key, oldRecord)); } return oldRecord; }
@Override public void doExpiration() { for (Map.Entry<K, R> entry : records.entrySet()) { K key = entry.getKey(); R value = entry.getValue(); if (isRecordExpired(value)) { invalidate(key); onExpire(key, value); } } }
@Override public void storeKeys() { if (nearCachePreloader != null) { nearCachePreloader.storeKeys(records.keySet().iterator()); } }
@Override protected R getOrCreateToReserve(K key, Data keyData) { return records.applyIfAbsent(key, new ReserveForUpdateFunction(keyData)); }
@Override @SuppressWarnings("unchecked") protected V updateAndGetReserved(K key, final V value, final long reservationId, boolean deserialize) { R existingRecord = records.applyIfPresent(key, new IBiFunction<K, R, R>() { @Override public R apply(K key, R reservedRecord) { return updateReservedRecordInternal(key, value, reservedRecord, reservationId); } }); if (existingRecord == null || !deserialize) { return null; } Object cachedValue = existingRecord.getValue(); return cachedValue instanceof Data ? toValue(cachedValue) : (V) cachedValue; }
@Override public <C extends EvictionCandidate<K, V>> boolean tryEvict(C evictionCandidate, EvictionListener<K, V> evictionListener) { if (evictionCandidate == null) { return false; } if (remove(evictionCandidate.getAccessor()) == null) { return false; } if (evictionListener != null) { evictionListener.onEvict(evictionCandidate.getAccessor(), evictionCandidate.getEvictable(), false); } return true; }
@Override public R getRecord(K key) { return records.get(key); }
@Override protected HeapNearCacheRecordMap<K, R> createNearCacheRecordMap(NearCacheConfig nearCacheConfig) { return new HeapNearCacheRecordMap<K, R>(serializationService, DEFAULT_INITIAL_CAPACITY); }
@Override protected boolean containsRecordKey(K key) { return records.containsKey(key); }