Caffeine缓存简介说明

书欣 Spring 发布时间:2023-07-03 23:14:41 阅读数:9671 1
下文笔者讲述一个非常有用的本地缓存库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来回收缓存数据
   此种方式性能较差,不建议使用
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202307/6972.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者