经过网上的资料查找以及自己的实验,找到了一种方法解决该问题的方法,即缓存。将需要的所有数据缓存起来,放到内存中,数据更改的时候,清掉缓存,再次重新缓存数据。这样能减少对数据库的访问,提高效率。
本人用到的是Map,个人觉得Map实现缓存机制比较简单实用。
接下来是简单示例
首先建一个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;
- }
假设需要根据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();
- }
- }
- }