java中使用内存来存储数据案例

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;
  }
   
 }
 }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值