1.先创建一个对象作为存储对象
public class UserCache{
Map<String,User> idAndUsers = new HashMap<String , User> // 存取所有的用户 key为主键Id value为User对象
List userIds = newArrayList<String>(); // 存取所有的用户id
//get set方法省略
}
2.定义Spring对象作为调用类
@Component
class UserManager{
@AutoWired
UserService userService;
UserCache cache; //创建一个缓存对象
public UserManager(){
this.cache = new UserCache(); // 新初始化一个对象时清空cache对象保证cache中没有其他的
}
public Map<String,User> getAllUsers(){
return cache.getIdAndUser();
}
public ArrayList<String> getAllIds(){
return cache.getUserIds();
}
//对象初始化之后初始化加载缓存对象
@PostConstruct
public void init() {
loadCache();
}
//定时器 初始化完成1000毫秒之后开始运行定时器 定时更新缓存对象 或者也可以暴露一个接口直接调用如果没有直接从数据库加载然后缓存在缓存对象中
@Scheduled(fixedDelay = 1000 * 60 * 30, initialDelay = 1000)
public void onTimer() {
loadCache();
}
private loadCache(){
//初始化cache对象将协议缓存的对象放入cache对象中方便后续调用
//从数据库中读取出来
Map<String,User> allUser = userService.getAll().stream().collect(Collectors.toMap(item->item.getId() , item->item));
List allIds = userService.getAll().stream().map(item->item.getId()).collect(Collectors.toList());
synchronized(cache){
cache.setIdAndUsers = allUser;
cache.setUserIds = allIds;
}
}
}
3.调用:
直接在调用的类中通过注解引入
@Service
UserManager userManager;
通过如下调用:
Map<String,User> idAndUsers = userManager.getAllUsers();和 list ids=userManager.getAllIds();
也可以省掉1直接将1的集合放入2中使用,如下:
2.定义Spring对象作为调用类
@Component
class UserManager{
@AutoWired
UserService userService;
Map<String,User> idAndUsers = new HashMap<String , User> // 存取所有的用户 key为主键Id value为User对象
List userIds = newArrayList<String>(); // 存取所有的用户id
//get set方法省略
public Map<String,User> getIdAndUsers(){
return this.idAndUsers;
}
public ArrayList<String> getUserIds(){
return this.;
}
//对象初始化之后初始化加载缓存对象
@PostConstruct
public void init() {
loadCache();
}
//定时器 初始化完成1000毫秒之后开始运行定时器 定时更新缓存对象 或者也可以暴露一个接口直接调用如果没有直接从数据库加载然后缓存在缓存对象中
@Scheduled(fixedDelay = 1000 * 60 * 30, initialDelay = 1000)
public void onTimer() {
loadCache();
}
private loadCache(){
//初始化cache对象将协议缓存的对象放入cache对象中方便后续调用
//从数据库中读取出来
Map<String,User> allUser = userService.getAll().stream().collect(Collectors.toMap(item->item.getId() , item->item));
List allIds = userService.getAll().stream().map(item->item.getId()).collect(Collectors.toList());
synchronized(cache){
cache.setIdAndUsers = allUser;
cache.setUserIds = allIds;
}
}
}