本地缓存
(1)将数据缓存在应用服务器上,性能最好。
(2)常用缓存工具:Ehcache、Guava、Caffein等。
分布式缓存
(1)将数据缓存在NoSQL数据库上,跨服务器。
(2)常用缓存工具:MemCache、Redis等。
多级缓存
(1)>一级缓存(本地缓存)>二级缓存(分布式缓存)>DB
(2)避免缓存雪崩(缓存失效,大量请求直达DB,提高系统的可用性。
本地缓存和redis缓存的示意图(本地缓存更普适,效率更高)
在github上搜Caffeine,第一个就是。在mvn库里搜caffeine,把com.github.ben-manes.caffeine粘贴到pom.xml。在application-properties里添加
# caffeine
# 15页,不一定是前15页,例如缓存热门帖子的15页,没必要缓存所有(浪费内存空间)
caffeine.posts.max-size=15
# 3分钟过期
caffeine.posts.expire-seconds=180
在DiscussPostService类里,添加
@Value("${caffeine.posts.max-size}")
private int maxSize;
@Value("${caffeine.posts.expire-seconds}")
private int expireSeconds;
//Caffeine核心接口:Cache,子接口LoadingCache(排队等),AsyncLoadingCache(异步,支持并发,不着急返回)
//帖子列表缓存
private LoadingCache<String,List<DiscussPost>> postListCache;
// 帖子总数缓存
private LoadingCache<Integer, Integer> postRowsCache;
@PostConstruct
public void init(){
//初始化帖子列表缓存
postListCache = Caffeine.newBuilder() //先用caffine
.maximumSize(maxSize)
.expireAfterWrite(expireSeconds, TimeUnit.SECONDS)
.build(new CacheLoader<String, List<DiscussPost>>