You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.4 KiB
59 lines
2.4 KiB
package com.mh.user.config; |
|
|
|
import com.github.benmanes.caffeine.cache.*; |
|
import org.springframework.context.annotation.Bean; |
|
import org.springframework.context.annotation.Configuration; |
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
/** |
|
* @author LJF |
|
* @title : |
|
* @description 使用caffeine缓存技术 |
|
* @updateTime 2020-12-15 |
|
* @throws : |
|
*/ |
|
@Configuration |
|
public class CaffeineCacheConfig { |
|
|
|
// 软引用: 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。 |
|
// 弱引用: 弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象, |
|
// 不管当前内存空间足够与否,都会回收它的内存 |
|
@Bean(name = "caffeineCache") |
|
public Cache<String, Object> caffeineCache() { |
|
return Caffeine.newBuilder() |
|
// 软引用 |
|
.softValues() |
|
// 弱引用 |
|
// .weakValues() |
|
// 设置最后一次写入或访问后经过固定时间过期 |
|
.expireAfterWrite(8*60*60, TimeUnit.SECONDS) |
|
// 初始的缓存空间大小 |
|
.initialCapacity(100) |
|
// 缓存的最大条数 |
|
.maximumSize(1000) |
|
.build(); |
|
} |
|
|
|
//定义缓存,可直接使用 |
|
@Bean |
|
public LoadingCache expiryCache(){ |
|
LoadingCache<String, Object> loadingCache = Caffeine.newBuilder() |
|
.initialCapacity(100) |
|
.maximumSize(1000) |
|
//缓存写入/删除监控 |
|
.writer(new CacheWriter<Object, Object>() { |
|
@Override |
|
public void write(Object key, Object value) { //此方法是同步阻塞的 |
|
System.out.println("--缓存写入--:key=" + key + ", value=" + value); |
|
} |
|
@Override |
|
public void delete(Object key, Object value, RemovalCause cause) { System.out.println("--缓存删除--:key=" + key); } |
|
}) |
|
.expireAfterAccess(6, TimeUnit.HOURS) //过期时间 |
|
.build((String key)->"刷新的数据"); //cacheload实现类,刷新时候调用 |
|
// loadingCache.put("name","侯征"); |
|
return loadingCache; |
|
} |
|
|
|
}
|
|
|