1.       缓存处理工具

1.1.   概述

本架构参考缓存的使用方式,封装了一种可以自动对需要缓存的数据进行初始化的缓存处理工具

缓存处理工具基于缓存访问器实现

其设计目的为无论分布式缓存服务发生任何故障都得保证业务层面可以获取到相应的数据

缓存处理工具获取缓存数据的部分,需要使用本框架的用户实现

1.2.   UML

1.2.1.        类图

1.3.   使用方式

1.3.1.        实现缓存处理工具

如果需要实现缓存处理工具可以继承org.jtry.framework.cache.CacheProcessor类,实际例子如下

 

public class UserNameCacheProcessor extends CacheProcessor<String, User> {

   

    @Bean(thisClass=UserDaoImpl.class)

    UserDao userDao;

 

    @Override

    public String getCode() {

       return "UserNameCacheProcessor";

    }

 

    @Override

    public Map<String, User> getMapAbsolute() {

       return userDao.getAllUserMap();

    }

 

    @Override

    public List<User> getListAbsolute() {

       return userDao.getAllUserList();

    }

 

    @Override

    public User getAbsolute(String key) {

       return userDao.getUser(key);

    }

}

 

如上例子需要实现4个方法。分别为

 

    public abstract String getCode();//提供分布式缓存使用的外部键

 

    public abstract Map<K, V> getMapAbsolute();//提供对应业务数据Map结构的数据获取来源

 

    public abstract List<V> getListAbsolute();//提供对应业务数据List结构的数据获取来源

 

    public abstract V getAbsolute(K key);//提供对应业务数据单个数据的获取来源

 

缓存处理工具也属于注册代理对象,所以可以使用@Bean注解为其内部代理属性赋值

故而获取数据的方式可以是一个业务注册代理对象(如ServiceDao),也可以在实现方法中用其他手段获取数据

也可以把另一个缓存处理工具作为该缓存处理工具的数据来源,这样就构成了一个简单的二级缓存,以此类推也可以实现三级四级缓存。

 

1.3.2.        获取缓存处理工具

要获取实现好的缓存处理工具可以使用如下方式

 

如果在已注册代理的业务逻辑对象中使用缓存处理工具可以直接使用@Bean注解

 

public class UserServiceImpl implements UserService {

 

    @Bean(thisClass = UserDaoImpl.class)

    UserDao userDao;

 

    @Bean(thisClass = UserNameCacheProcessor.class)

    CacheProcess<String, User> userNameCacheProcessor;

 

本质上缓存处理工具作为属性被赋值的方式可以参照对象代理中心章节的相关说明

其与一般已注册代理的业务逻辑对象别无二致,包括如下方式获取

 

CacheProcess<String, User> userNameCacheProcessor = BeanManager.registrationClass(UserNameCacheProcessor. class);

 

1.3.3.        使用缓存处理工具

获取到缓存处理工具可以调用以下方法

 

    V getCache(K key);

 

    Map<K, V> getCacheMap();

 

    List<V> getCacheList();

 

    boolean initCacheSingle(K key);

 

    boolean initCache();

 

 

getCache方法获取对应单个数据来源的缓存数据

如果单个数据从缓存服务获取不到则会从该缓存处理工具中Map结构中去寻找,并重新加载到单个缓存

如果Map缓存数据中也未找到则会调用获取单个数据来源的方法去获取,并重新加载到单个缓存

 

getCacheList方法获取对应List结构来源的缓存数据

如果List结构数据从缓存服务获取不到则会从该缓存处理工具中Map结构中去寻找,并重新加载到List结构缓存

如果Map缓存数据中也未找到则会调用获取List结构数据来源的方法去获取,并重新加载到List结构缓存

 

getCacheMap方法获取对应Map结构数据来源的缓存数据

如果Map结构数据从缓存服务获取不到则会调用获取Map数据来源的方法去获取,并重新加载到Map结构缓存

 

initCacheSingle方法为从单个数据来源中获取数据并重新初始化到缓存服务

 

initCache方法为重新初始化该缓存处理工具对应缓存服务的全部数据