com.google.common.cache.Cache类的使用及代码示例

x33g5p2x  于2022-01-17 转载在 其他  
字(7.4k)|赞(0)|评价(0)|浏览(451)

本文整理了Java中com.google.common.cache.Cache类的一些代码示例,展示了Cache类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Cache类的具体详情如下:
包路径:com.google.common.cache.Cache
类名称:Cache

Cache介绍

[英]A semi-persistent mapping from keys to values. Cache entries are manually added using #get(Object,Callable) or #put(Object,Object), and are stored in the cache until either evicted or manually invalidated. The common way to build instances is using CacheBuilder.

Implementations of this interface are expected to be thread-safe, and can be safely accessed by multiple concurrent threads.
[中]从键到值的半持久映射。使用#get(Object,Callable)或#put(Object,Object)手动添加缓存项,并将其存储在缓存中,直到逐出或手动使其无效。构建实例的常用方法是使用CacheBuilder。
该接口的实现应该是线程安全的,并且可以由多个并发线程安全地访问。

代码示例

代码示例来源:origin: prestodb/presto

private <K, V> V loadValue(Cache<K, V> cache, K key, Supplier<V> valueSupplier)
{
  if (replay) {
    return Optional.ofNullable(cache.getIfPresent(key))
        .orElseThrow(() -> new PrestoException(NOT_FOUND, "Missing entry found for key: " + key));
  }
  V value = valueSupplier.get();
  cache.put(key, value);
  return value;
}

代码示例来源:origin: apache/incubator-druid

@Override
public V get(K key, Callable<? extends V> valueLoader) throws ExecutionException
{
 return cache.get(key, valueLoader);
}

代码示例来源:origin: Graylog2/graylog2-server

@Override
public V remove(K key) throws CacheException {
  final V old = cache.getIfPresent(key);
  cache.invalidate(key);
  return old;
}

代码示例来源:origin: apache/incubator-druid

@Override
public void invalidateAll()
{
 cache.invalidateAll();
 cache.cleanUp();
}

代码示例来源:origin: thinkaurelius/titan

@Override
public synchronized void close() {
  volatileVertices.clear();
  cache.invalidateAll();
  cache.cleanUp();
}

代码示例来源:origin: thinkaurelius/titan

@Override
public InternalVertex get(final long id, final Retriever<Long, InternalVertex> retriever) {
  final Long vertexId = id;
  InternalVertex vertex = cache.getIfPresent(vertexId);
  if (vertex == null) {
    InternalVertex newVertex = volatileVertices.get(vertexId);
    if (newVertex == null) {
      newVertex = retriever.get(vertexId);
    }
    assert newVertex!=null;
    try {
      vertex = cache.get(vertexId, new NewVertexCallable(newVertex));
    } catch (Exception e) { throw new AssertionError("Should not happen: "+e.getMessage()); }
    assert vertex!=null;
  }
  return vertex;
}

代码示例来源:origin: google/guava

public void testAsMapValues_iteratorRemove() {
  Cache<Integer, Integer> cache =
    CacheBuilder.newBuilder()
      .expireAfterWrite(1000, TimeUnit.MILLISECONDS)
      .ticker(fakeTicker)
      .build();

  cache.put(10, 20);
  Iterator<Integer> iterator = cache.asMap().values().iterator();
  iterator.next();
  iterator.remove();

  assertEquals(0, cache.size());
 }
}

代码示例来源:origin: google/guava

public void testInvalidate() {
 Cache<Integer, Integer> cache = CacheBuilder.newBuilder().build();
 cache.put(654, 2675);
 cache.put(2456, 56);
 cache.put(2, 15);
 cache.invalidate(654);
 assertFalse(cache.asMap().containsKey(654));
 assertTrue(cache.asMap().containsKey(2456));
 assertTrue(cache.asMap().containsKey(2));
}

代码示例来源:origin: google/guava

public void testAsMapKeySet() {
 Cache<Integer, Integer> cache =
   CacheBuilder.newBuilder()
     .expireAfterWrite(1000, TimeUnit.MILLISECONDS)
     .ticker(fakeTicker)
     .build();
 cache.put(10, 20);
 fakeTicker.advance(500, TimeUnit.MILLISECONDS);
 cache.put(20, 22);
 cache.put(5, 10);
 fakeTicker.advance(501, TimeUnit.MILLISECONDS);
 Set<Integer> foundKeys = new HashSet<>(cache.asMap().keySet());
 assertEquals(ImmutableSet.of(20, 5), foundKeys);
}

代码示例来源:origin: google/guava

public void testInvalidateAll() {
 Cache<Integer, Integer> cache = CacheBuilder.newBuilder().build();
 cache.put(654, 2675);
 cache.put(2456, 56);
 cache.put(2, 15);
 cache.invalidateAll();
 assertFalse(cache.asMap().containsKey(654));
 assertFalse(cache.asMap().containsKey(2456));
 assertFalse(cache.asMap().containsKey(2));
 cache.put(654, 2675);
 cache.put(2456, 56);
 cache.put(2, 15);
 cache.put(1, 3);
 cache.invalidateAll(ImmutableSet.of(1, 2));
 assertFalse(cache.asMap().containsKey(1));
 assertFalse(cache.asMap().containsKey(2));
 assertTrue(cache.asMap().containsKey(654));
 assertTrue(cache.asMap().containsKey(2456));
}

代码示例来源:origin: google/guava

public void testAsMapValues_contains() {
 Cache<Integer, Integer> cache =
   CacheBuilder.newBuilder()
     .expireAfterWrite(1000, TimeUnit.MILLISECONDS)
     .ticker(fakeTicker)
     .build();
 cache.put(10, 20);
 fakeTicker.advance(500, TimeUnit.MILLISECONDS);
 cache.put(20, 22);
 cache.put(5, 10);
 fakeTicker.advance(501, TimeUnit.MILLISECONDS);
 assertTrue(cache.asMap().values().contains(22));
 assertTrue(cache.asMap().values().contains(10));
 assertFalse(cache.asMap().values().contains(20));
}

代码示例来源:origin: google/guava

static void checkEmpty(Cache<?, ?> cache) {
 assertEquals(0, cache.size());
 assertFalse(cache.asMap().containsKey(null));
 assertFalse(cache.asMap().containsKey(6));
 assertFalse(cache.asMap().containsValue(null));
 assertFalse(cache.asMap().containsValue(6));
 checkEmpty(cache.asMap());
}

代码示例来源:origin: Graylog2/graylog2-server

@Override
public void purge(LookupCacheKey purgeKey) {
  if (purgeKey.isPrefixOnly()) {
    // If the key to purge only contains a prefix, invalidate all keys with that prefix
    cache.invalidateAll(
        cache.asMap().keySet().stream()
            .filter(lookupCacheKey -> purgeKey.prefix().equals(lookupCacheKey.prefix()))
            .collect(Collectors.toSet())
    );
  } else {
    cache.invalidate(purgeKey);
  }
}

代码示例来源:origin: google/guava

public void testAsMap_containsKey() {
 Cache<Integer, Integer> cache =
   CacheBuilder.newBuilder()
     .expireAfterWrite(20000, TimeUnit.MILLISECONDS)
     .ticker(fakeTicker)
     .build();
 cache.put(654, 2675);
 fakeTicker.advance(10000, TimeUnit.MILLISECONDS);
 cache.put(2456, 56);
 cache.put(2, 15);
 fakeTicker.advance(10001, TimeUnit.MILLISECONDS);
 assertTrue(cache.asMap().containsKey(2));
 assertTrue(cache.asMap().containsKey(2456));
 assertFalse(cache.asMap().containsKey(654));
}

代码示例来源:origin: google/guava

public void testComputeIfPresent() {
 cache.put(key, "1");
 // simultaneous update for same key, expect count successful updates
 doParallelCacheOp(
   count,
   n -> {
    cache.asMap().computeIfPresent(key, (k, v) -> v + delimiter + n);
   });
 assertEquals(1, cache.size());
 assertThat(cache.getIfPresent(key).split(delimiter)).hasLength(count + 1);
}

代码示例来源:origin: google/guava

public void testLoader() throws ExecutionException {
 final Cache<Integer, Integer> cache = CacheBuilder.newBuilder().build();
 Callable<Integer> loader =
   new Callable<Integer>() {
    private int i = 0;
    @Override
    public Integer call() throws Exception {
     return ++i;
    }
   };
 cache.put(0, 10);
 assertEquals(Integer.valueOf(10), cache.get(0, loader));
 assertEquals(Integer.valueOf(1), cache.get(20, loader));
 assertEquals(Integer.valueOf(2), cache.get(34, loader));
 cache.invalidate(0);
 assertEquals(Integer.valueOf(3), cache.get(0, loader));
 cache.put(0, 10);
 cache.invalidateAll();
 assertEquals(Integer.valueOf(4), cache.get(0, loader));
}

代码示例来源:origin: google/guava

public void testAsMapEntrySet() {
 Cache<Integer, Integer> cache =
   CacheBuilder.newBuilder()
     .expireAfterWrite(1000, TimeUnit.MILLISECONDS)
     .ticker(fakeTicker)
     .build();
 cache.put(10, 20);
 fakeTicker.advance(500, TimeUnit.MILLISECONDS);
 cache.put(20, 22);
 cache.put(5, 10);
 fakeTicker.advance(501, TimeUnit.MILLISECONDS);
 int sum = 0;
 for (Entry<Integer, Integer> current : cache.asMap().entrySet()) {
  sum += current.getKey() + current.getValue();
 }
 assertEquals(57, sum);
}

代码示例来源:origin: google/guava

public void testUpdates() {
 cache.put(key, "1");
 // simultaneous update for same key, some null, some non-null
 doParallelCacheOp(
   count,
   n -> {
    cache.asMap().compute(key, (k, v) -> n % 2 == 0 ? v + delimiter + n : null);
   });
 assertTrue(1 >= cache.size());
}

代码示例来源:origin: google/guava

public void testValuesIsNotASet() {
 assertFalse(CacheBuilder.newBuilder().build().asMap().values() instanceof Set);
}

代码示例来源:origin: apache/incubator-druid

@Override
public V getIfPresent(K key)
{
 return cache.getIfPresent(key);
}

相关文章