缓存多种不同类型的数据(工厂设计模式)

需求说明:最近设计了一个“权限管理系统”,在用户登录的时候就需要知道用户对资源所拥有的权限,如果每个用户在登录的时候去查询对应的表(8张),因此对数据库和系统都是极大的负担,因此想缓存用户权限相关表的数据,以后在其余用户登录的时候去找相关的缓存数据,而不是去查询表了

 

问题:如何缓存不同表的数据,并且可以随时取用和更新,保证和数据库同步?

 

根据上诉的需求说明,自己写了一个cache的工厂,代码如下

package adtec.plugin.controller;

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

public class CachFactory {
	
	private static CachFactory cachFactory = null;
	
	//缓存已经创建的Map对象
	private Map<String,Map> factoryMap = new HashMap<String,Map>();
	
	//单例模式
	private CachFactory(){
	}
	
	//使用“懒加载”的单例模式
	public static CachFactory getInstance(){
		if(cachFactory == null){
			cachFactory = new CachFactory();
		}
		return cachFactory;
	}
	
	/**
	 * 创建key为cachName的Map对象
	 * @param cachName
	 * @return
	 */
	public Map<String,Object> createCache(String cachName){
		Map map = new HashMap<String,Object>();
		factoryMap.put(cachName, map);
		return map;
	}
	
	/**
	 * 判断是否存在key为cachName的map
	 * @param cachName
	 * @return
	 */
	public boolean isExist(String cachName){
		if(factoryMap.containsKey(cachName)){
			return true;
		}
		return false;
	}
	
	/**
	 * 获取key为cachName的map对象
	 * @param cachName
	 * @return
	 */
	public Map getMapByKey(String cachName){
		if(factoryMap.containsKey(cachName)){
			return factoryMap.get(cachName);
		}
		return null;
	}
	
	
	/*
	@org.junit.Test
	public void testabc(){
		//1、系统启动的时候从数据库中存数数据
		Map userMap = CachFactory.getInstance().createCach("user");
		userMap.put("huangbiao", "123456");
		//2、在对应的controller类中获取缓存的数据
		System.out.println(CachFactory.getInstance().getMapByKey("user").get("huangbiao"));
	}
	*/
	
}

 

在系统启动的时候查询所有相关的表,然后将数据缓存起来,需要用到对应缓存的时候,只需要知道CachFactory中是否缓存了名字为“key”的Map对象

 

问题:如果是在更新表的时候,就比较麻烦了,这时就需要完成两个动作:1、更新数据库  2、更新缓存,保证缓存和数据库的数据是同步的。

 

你可能感兴趣的:(设计模式)