享元模式:
主要用于减少创建对象的数量,以减少内存占用和提高性能 有时候不要特别死
@Component
@Slf4j
public class Cache implements CommandLineRunner {
@Autowired
private MaterialService materialService;
@Autowired
TabBzglXtpmflhxService tabBzglXtpmflhxService;
@Autowired
RedisTemplate redisTemplate;
public final static ConcurrentHashMap<Integer,List<MaterialVo>> yearMaterialMap = new ConcurrentHashMap<>();
final static BlockingQueue blockingQueue=new ArrayBlockingQueue<>(10);
final static ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(4,100, 1, TimeUnit.MINUTES, blockingQueue);
@Override
public void run(String... args) throws Exception {
startThread();
log.info("物资及物资分类缓冲完毕");
}
public static List<MaterialVo> getMaterialSls(Integer year) {
return yearMaterialMap.get(year);
}
public void startThread(){
List<Integer> yearList = materialService.selectYear();
for (Integer year:yearList) {
Runnable runnable = () -> {
yearMaterialMap.put(year,materialService.selectMaterial(year));
};
threadPoolExecutor.execute(runnable);
}
}
}
将每年的物质信息放入到Map中,通过年份去取每年的物质
还有我们平时做的一些权限系统,将用户的账户Id和权限绑定,查询用户权限时可以直接去通过账户id去取权限,如果map中没有,去数据库查查,完之后将用户对应的权限放入map中,如果权限发生改变时,通过权限id查出对应的账户删除map中的相应账户id
Map<Long, List<>> map = new ConcurrentHashMap<Long, List<>>();