Caffeine缓存简介说明
									
下文笔者讲述一个非常有用的本地缓存库Caffeine,目前已应用于Spring框架中
				 
				Caffeine缓存库简介
Caffeine 是 基于Java8的高性能 接近最佳的缓存库 Caffeine目前在Spring内部中有使用 Caffeine的GitHub地址为:github.com/ben-manes/caffeine
Caffeine缓存库的使用方法
//引入依赖
<dependency>
	<groupId>com.github.ben-manes.caffeine</groupId>
	<artifactId>caffeine</artifactId>
</dependency>
//使用方法
Logger log = LoggerFactory.getLogger(CaffeineTest.class);
/**
 * 基本用法测试
 */
@Test
public void create() {
	// 创建缓存对象
	Cache<String, String> cache = Caffeine.newBuilder().build();
	// 存数据
	cache.put("username", "java265.com");
	// 取数据,不存在则返回null
	String username = cache.getIfPresent("username");
	log.info("username: {}", username);
	// 取数据,不存在则去数据库查询
	String age = cache.get("age", key -> {
		// 此处可以去数据库根据 key查询value
		return "11";
	});
	log.info("age: {}", age);
}
Caffeine提供三种缓存驱逐策略
基于容量:设置缓存的数量上限
/**
 * 基于大小设置驱逐策略:
 * @throws InterruptedException e
 */
@Test
public void evictByNum() throws InterruptedException {
	// 创建缓存大小上限为1
	Cache<String, String> cache = Caffeine.newBuilder()
			// 设置缓存大小上限为 1
			.maximumSize(1)
			.build();
	// 存数据
	cache.put("username1", "java265");
	cache.put("username2", "test");
	cache.put("username3", "最爱java");
	log.info("start");
	// 延迟10ms,给清理线程一点时间
	Thread.sleep(100L);
	// 获取数据
	log.info("gf1: " + cache.getIfPresent("username1"));
	log.info("gf2: " + cache.getIfPresent("username2"));
	log.info("gf3: " + cache.getIfPresent("username3"));
}
 
基于时间:设置缓存的有效时间
/**
 * 基于时间设置驱逐策略
 */
@Test
public void evictByTime() throws InterruptedException {
	// 创建缓存对象
	Cache<String, String> cache = Caffeine.newBuilder()
			.expireAfterWrite(Duration.ofSeconds(1))// 设置缓存有效期为 1 秒
			.build();
	// 存数据
	cache.put("username", "java265");
	// 获取数据
	log.info("gf: " + cache.getIfPresent("username"));
	// 休眠一会儿
	Thread.sleep(1200L);
	log.info("gf: " + cache.getIfPresent("username"));
}
基于引用:
  设置缓存为软引用或弱引用
  利用GC来回收缓存数据
   此种方式性能较差,不建议使用
 
									
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

			
               
               
               
               
          
