//声明讲师的List和Map缓存属性
private List<User> masters = new CopyOnWriteArrayList<>();
private Map<String, User> masterMap = new ConcurrentHashMap<>();
private Timer timer = new Timer();
//编写一个初始化代码块,来设定每隔30分钟清空一次缓存中的内容
{
//这里的代码会在构造方法执行之前运行
timer.schedule(
new TimerTask() {
@Override
public void run() {
synchronized (masters){
masters.clear();
masterMap.clear();
log.debug("缓存已清空");
}
}
},
1000 * 60 * 30, 1000 * 60 * 30);
}
@Override
public List<User> getMasters() {
if (masters.isEmpty()) {
synchronized (masters) {
if (masters.isEmpty()) {
QueryWrapper<User> query = new QueryWrapper<>();
//讲师的条件是type列的值为1
query.eq("type", 1);
List<User> list = userMapper.selectList(query);
//将全部讲师保存到List缓存
masters.addAll(list);
//将全部讲师保存到Map缓存
for (User u : list) {
masterMap.put(u.getNickname(), u);
}
//因为密码属性属于安全级别较高的属性
// 不宜长时间保存在内存中
//所以我们编写代码清楚密码或类似的"敏感信息"
for (User u : list) {
u.setPassword("");
}
}
}
}
//别忘了返回masters
return masters;
}
@Override
public Map<String, User> getMasterMap() {
if (masterMap.isEmpty()) {
getMasters();
}
return masterMap;
}