就我个人理解而言,缓存分为两种,线程间缓存和线程内缓存,
线程间缓存:在分布式环境下,多台服务器使用同一台数据库作为缓存,常见的如Redis。
线程内缓存:也叫本地缓存,外部请求请求到网关时,网关将请求转发送到各个服务器时,各个服务器本地做的缓存只有各个服务器自己才能用。
下面来看一下谷歌工具包的Cache是怎么做的,下面一个简单的demo,缓存的部分参数解释如下:
- import com.google.common.cache.Cache;
- import com.google.common.cache.CacheBuilder;
-
- import java.util.concurrent.TimeUnit;
-
- public class CacheBuilderDemo {
- private static final int EXPIRE_TIME = 2;
-
- private static final int MAXIMUM_SIZE = 2;
-
- private static final long SLEEP_TIME = 1000;
-
- /**
- * maximumSize 当缓存达到其最大大小maximumSize时,最早的值将被逐出。默认驱逐策略——LRU(Least Recently Used)
- */
- private static final Cache
CACHE = CacheBuilder.newBuilder() - .expireAfterAccess(EXPIRE_TIME, TimeUnit.SECONDS)
- .maximumSize(MAXIMUM_SIZE)
- .build();
-
- public static void main(String[] args) throws InterruptedException {
- CACHE.put("test", "hello world!");
- CACHE.put("test1", "hello world! ok");
- Thread.sleep(SLEEP_TIME);
- System.out.println(CACHE.getIfPresent("test"));
- }
- }
它使用了建造者设计模式,利用CacheBuilder中间对象去传入值,使用build方法去实例化对象,build方法不会更改此CacheBuilder实例的状态,因此可以再次调用它以创建多个独立缓存。
- @GwtCompatible(emulated = true)
- public final class CacheBuilder
{ - private static final int DEFAULT_INITIAL_CAPACITY = 16;
- private static final int DEFAULT_CONCURRENCY_LEVEL = 4;
- private static final int DEFAULT_EXPIRATION_NANOS = 0;
- private static final int DEFAULT_REFRESH_NANOS = 0;
- private static final Logger logger = Logger.getLogger(CacheBuilder.class.getName());
- int initialCapacity = UNSET_INT;
- int concurrencyLevel = UNSET_INT;
- long maximumSize = UNSET_INT;
- long maximumWeight = UNSET_INT;
- Weigher super K, ? super V> weigher;
-
- Strength keyStrength;
- Strength valueStrength;
-
- long expireAfterWriteNanos = UNSET_INT;
- long expireAfterAccessNanos = UNSET_INT;
- long refreshNanos = UNSET_INT;
- public static CacheBuilder
- return new CacheBuilder
- }
- ... ...
- public
extends K, V1 extends V> LoadingCache build( - CacheLoader super K1, V1> loader) {
- checkWeightWithWeigher();
- return new LocalCache.LocalLoadingCache
(this, loader); - }
- }
JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。使用方法与Guava/Caffeinecache类似。
参考链接:
1、com.google.common.cache.CacheBuilder.weigher()方法的使用及代码示例_其他_NULL123