1、利用JVM缓存。脱离redis。
2、导包,springboot自带此包。如没有可以导:com.google.guava:guava:20.0的包。
3、直接上代码:
java
package com.leo.cache;
import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import lombok.SneakyThrows;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @author Leo
*/
@Component
public class JvmLruOneCacheComponent {
Cache<String, String> allCache;
@PostConstruct
public void initCache() {
allCache = CacheBuilder.newBuilder()
.weakValues()
最大容量
.maximumSize(10L)
//多少分钟后没有访问的数据会被清除
.expireAfterAccess(30L, TimeUnit.MINUTES)
// 设置并发级别为cpu核心数
.concurrencyLevel(Runtime.getRuntime().availableProcessors() * 2)
.build();
}
public Map<String, String> getCache() {
return allCache.asMap();
}
@SneakyThrows
public List<StockCrawlingResponseDto> getStockCrawlingList() {
String key = "xxxxxxx";
//先获取缓存。没有缓存就从后面的方法获取数据并存入缓存
String jsonStr = allCache.get(key, () -> JSONObject.toJSONString(xxxxService.getData()));
return JSONObject.parseArray(jsonStr, xxxdto.class);
}
public String getCacheByKey(String key) {
return allCache.getIfPresent(key);
}
public void setCacheByKey(String key, String value) {
allCache.put(key, value);
}
public void deleteAllCache() {
allCache.invalidateAll();
}
public void deleteCache(String key) {
allCache.invalidate(key);
}
}