关于java:Map方式实现JAVA数据缓存

首先建一个map,该map用来寄存所有的数据

protected static Map<String, User> map = new HashMap<>();

加载所有User,将其放入到User中,map的key为User的id,value为user  加锁是为了爱护平安

public void loadAllUser() {


          if (map.size() == 0) {

                  synchronized (map) {

                          try {

                                  List<User> userInfoList = userDAO.findAllUser();

                                  for (User user : userInfoList) {

                                  map.put(user.getId, user);

                                  }

                          } catch (Exception e) {

                              e.printStackTrace();

                          }

                  }

          }

  }


如果须要依据id获取User

public User findById(String id){


      if(map.size() == 0){

          loadAllUser();

      }

      User user = map.get(id);

      return user;    

  }


这里须要先判断map是否为空,为空状况下就须要调用loadAllUser办法将数据存入到Map中

假如须要依据Name获取User  将map遍历一边

public User findByName(String name){

          if(map.size() == 0){
              loadAllUser();
          }
          User user = new User();
          for (Map.Entry<String, User> entry : map.entrySet()) {
              if (entry.getValue().getName.equals(name)) {
                  user = entry.getValue();
              }

      }

      return user;

  }


当然,必不可少的一个办法,clear

public void clearCache() {


      synchronized (map) {

          map.clear();

      }

  }



*在对数据进行 增 删 改的时候,必须调用这个clear办法,将缓存清空

这样,一个简略的缓存机制就实现了

这仅仅是自己低见

残缺代码如下

import java.util.HashMap;
  import java.util.List;
  import java.util.Map;

/* 查找所以数据放入到缓存 /

  public class MapCache {
      protected static Map<String, User> map = new HashMap<>();

  public void loadAllUser() {

      if (map.size() == 0) {

          synchronized (map) {

              try {

                  List<User> userInfoList = userDAO.findAllUser();

                  for (User user : userInfoList) {

                      map.put(user.getId, user);

                  }

              } catch (Exception e) {

                  e.printStackTrace();

              }
              }

      }

  }


  /** 依据id查找 */

  public User findById(String id) {

      if (map.size() == 0) {

          loadAllUser();

      }

      User user = map.get(id);

      return user;

  }


  /** 依据name查找 */

  public User findByName(String name) {

      if (map.size() == 0) {

          loadAllUser();

      }

      User user = new User();

      for (Map.Entry<String, User> entry : map.entrySet()) {

          if (entry.getValue().getName.equals(name)) {

              user = entry.getValue();

          }

      }

      return user;

  }


  /** 革除缓存 */

  public void clearCache() {

      synchronized (map) {

          map.clear();

      }

  }

}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理