All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.holmos.cache.cache.Cache Maven / Gradle / Ivy

There is a newer version: 1.0.2u10
Show newest version
package com.holmos.cache.cache;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.holmos.cache.cache.listener.CacheListener;
import com.holmos.cache.config.CacheConfigComponent;
import com.holmos.cache.element.Element;
import com.holmos.cache.exception.CacheException;
import com.holmos.cache.loader.CacheLoader;
import com.holmos.cache.outpolicy.CacheOutPolicy;
import com.holmos.cache.status.CacheStatus;

/**
 * Holmos Watsen单层缓存系统,此接口为缓存功能接口,如果实现新的缓存需要继承此接口
 * @author: 吴银龙([email protected])
 * @version: 2013-3-7 下午7:33:41 
 */

public interface Cache {
	/**
	 * 向缓存里面放入一个元素
	 * 
	 * 
  • 需要更新这个元素的一些属性信息,比如访问时间,访问次数等等,如果之前缓存中有此元素的话
  • *
  • 通知访问元素的监听器,触发一些事件
  • *
  • 如果此元素原来在缓存里面没有,则新增此元素;如果有,则更新此元素
  • * * @param element 待进行put操作的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * */ public void put(Element element) throws IllegalArgumentException,IllegalStateException, CacheException; /** * {@link #put(Element)}的批量操作方法 * *
  • 当集合中有一个Element为null 或者整个集合为null,抛出{@link IllegalArgumentException}
  • *
  • 其他功能和{@link #put(Element)}一致
  • * * @param elements 待进行put操作的元素集合 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * */ public void putAll(Collection elements) throws IllegalArgumentException, IllegalStateException, CacheException; /** * 同步put操作,等待element已经成功放入缓存内部之后返回 * *
  • 其他操作同{@link #put(Element)}
  • * * @param element 待进行put操作的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * */ public void putSyn(Element element) throws IllegalArgumentException,IllegalStateException, CacheException; /** * 不等待缓存元素成功放入缓存立即返回 * *
  • 其他操作同{@link #put(Element)}
  • * * @param element 待进行put操作的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * */ public void putAsy(Element element) throws IllegalArgumentException,IllegalStateException, CacheException; /** * put 操作的静默模式,不更新此数据的状态信息,比如访问次数,最近访问时间,不修改版本号,也不触发元素访问监听器,只是很简单的向缓存里面放入此数据 * *
  • 不更新缓存元素状态信息
  • *
  • 不触发缓存元素访问监听器
  • * * @param element 待进行put操作的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * */ public void putQuite(Element element) throws IllegalArgumentException,IllegalStateException, CacheException; /** * 删除 索引 为key 的缓存元素 * *
  • 触发缓存元素访问监听器
  • * * @param key 待进行remove操作的元素的索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如key == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用remove抛出此异常 * @return true 删除成功
    false 删除失败 * */ public boolean remove(Object key) throws IllegalArgumentException,IllegalStateException, CacheException; /** * {@link #remove(Object)}的批量操作 * * @param keys 待进行remove操作的元素的索引集合 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如其中任何一个元素key == null,keys == null 的时候也抛出此异常 * @throws IllegalStateException 当缓存不处于服务状态的时候调用remove抛出此异常 * @return true 删除成功
    false 删除失败 * */ public boolean removeAll(Collection keys)throws IllegalArgumentException,IllegalStateException, CacheException; /** * 等待缓存元素成功从缓存中移除成功之后方法返回 * *
  • 其他操作同{@link #remove(Object))}
  • * * @param key 待进行remove操作的元素索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用remove抛出此异常 * @return true 删除成功
    false 删除失败 * */ public boolean removeSyn(Object key) throws IllegalArgumentException,IllegalStateException, CacheException; /** * 不等待缓存元素成功从缓存中移除直接返回,但要触发缓存元素访问监听器 * *
  • 其他操作同{@link #remove(Object))}
  • * * @param key 待进行remove操作的元素索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用remove抛出此异常 * @return true 删除成功
    false 删除失败 * */ public boolean removeAsy(Object key) throws IllegalArgumentException,IllegalStateException, CacheException; /** * 进行remove操作,但不触发缓存元素访问监听器 * *
  • 不触发缓存元素访问监听器
  • *
  • 其他操作同{@link #remove(Object))}
  • * * @param key 待进行remove操作的元素索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如element == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用remove抛出此异常 * @return true 删除成功
    false 删除失败 * */ public boolean removeQuite(Object key)throws IllegalArgumentException,IllegalStateException, CacheException; /** * 将缓存中元素oldElement替换为newElement,并且触发缓存元素访问监听器 * *
  • 如果oldElement在缓存里面没有,则返回false
  • *
  • 如果oldElement和newElement为null或者他们的key有一个为null,则抛出{@link IllegalArgumentException}
  • * * @param oldElement 待进行replace操作的元素 * @param newElement 替换后的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如oldElement == null || newElement == null 获取他们的key 为null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return true 替换成功
    false 替换失败 * */ public boolean replace(Element oldElement,Element newElement)throws IllegalArgumentException,IllegalStateException, CacheException; /** * 等待该缓存中元素发生更新之后返回 * *
  • 同步替换缓存数据
  • *
  • 其他功能与{@link #replace(Element, Element)}一致
  • * * @param oldElement 待进行replace操作的元素 * @param newElement 替换后的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如oldElement == null || newElement == null 获取他们的key 为null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return true 替换成功
    false 替换失败 * */ public boolean replaceSyn(Element oldElement,Element newElement,boolean noReplicate)throws IllegalArgumentException,IllegalStateException, CacheException; /** * replace本机缓存数据的同时,异步更新主从节点上的缓存数据,本机replace操作之后立即返回 * *
  • 异步替换缓存数据
  • *
  • 其他功能与{@link #replace(Element, Element)}一致
  • * * @param oldElement 待进行replace操作的元素 * @param newElement 替换后的元素 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如oldElement == null || newElement == null 获取他们的key 为null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return true 替换成功
    false 替换失败 * */ public boolean replaceAsy(Element oldElement,Element newElement,boolean noReplicate)throws IllegalArgumentException,IllegalStateException, CacheException; /** * 从缓存中获取索引为key的元素,同时更新缓存元素的状态信息 * *
  • 缓存中有此元素,则返回,无则返回null
  • *
  • 更新缓存元素的状态,比如最近访问时间,访问次数
  • *
  • 触发缓存元素访问监听器
  • * * @param key 待get元素的索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如key == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 找到的索引为key的元素,如若没有,则为null * */ public Element get(Object key) throws IllegalArgumentException,IllegalStateException, CacheException; /** * 批量获取缓存中的元素,这些元素的索引在集合keys中 * *
  • 批量获取,并且只发生一次对屋里存储的调用,不是简单的get批量操作
  • *
  • 找不到一个元素的时候,返回的结果不是null而是一个空map,里面没有一个元素
  • *
  • 触发缓存元素访问监听器
  • * * @param keys 待get操作的所有keys索引集合 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如keys == null,或者集合中任意一个元素key == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 找到索引集合keys中所有key的元素map列表,如果都没有找到,则返回空map * */ public Map getAll(Collection keys)throws IllegalArgumentException,IllegalStateException, CacheException; /** * get操作的静默模式,不更新缓存中元素的状态信息(比如最近访问时间),也不触发缓存元素访问监听器,直接找到元素返回 * *
  • 不更新缓存元素的状态信息
  • *
  • 不触发缓存元素访问监听器
  • * * * @param key 待get元素的索引 * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalArgumentException 当传入非法参数的时候,比如key == null * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 找到的索引为key的元素,如若没有,则为null * */ public Element getQuite(Object key)throws IllegalArgumentException,IllegalStateException, CacheException; /** * 获取该缓存中所有的索引keys列表 * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用get抛出此异常 * @return 缓存中所有的索引,当缓存为空的时候,返回空list * */ public List getAllKeys()throws IllegalStateException,CacheException; /** * 获取该缓存中所有的索引keys列表,但需要进行是否过期的校验,如果过期,则不获取,但不从缓存中删除 * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 缓存中所有的索引,当缓存为空的时候,返回空list * */ public List getAllKeysWithExpireCheck()throws IllegalStateException,CacheException; /** * 判断指定索引key所指向的元素是否过期 * * @param key 待检查的索引key,如果为null,则抛出{@link IllegalArgumentException} * * @return true 过期
    false 没有过期 * */ public boolean isExpired(Object key) throws IllegalArgumentException,CacheException; /** * 获取所有注册到该cache中的缓存事件监听器 * * @return 所有注册到该cache中的缓存事件监听器 * */ public List getAllCacheListeners(); /** * 将cacheListener注册到该缓存中,那么缓存执行指定操作的时候,将会通知cacheListener * * @param 待注册的cacheListener * */ public void registerCacheListener(CacheListener cacheListener); /** * 注销指定的缓存监听器 * * @param 待注销指定的缓存监听器 * */ public void removeCacheListener(CacheListener cacheListener); /** * 注销掉注册在该缓存上的所有缓存事件监听器 * */ public void removeAllCacheListeners(); /** * 判断缓存中是否有指定索引key所指向的元素 * * @param key 待校验的元素索引key * @throws CacheException * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用isExist抛出此异常 * @return true 存在
    false 不存在 * */ public void isExist(Object key)throws IllegalStateException,CacheException; /** * 获取缓存的可用大小,单位为B(Byte) * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 缓存当下可用的大小 * */ public long getRemainSize()throws IllegalStateException,CacheException; /** * 获取缓存的已用大小,单位为B(Byte),包括已经过期还没有从缓存中删除的元素 * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用put抛出此异常 * @return 缓存当下可用的大小 * */ public long getUsedSize()throws IllegalStateException,CacheException; /** * 获取当前缓存所在的层次,层数越低,越先被访问,比如JVM内存层数为1,bigMemory为2等等,这个是写在配置文件中的 * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用getLayer抛出此异常 * @return 缓存的层次 * */ public int getLayer()throws IllegalStateException,CacheException; /** * 获取当前缓存的状态信息,包括(访问次数,命中次数,当前已用大小,可用大小,缓存名字,缓存层数等等) * * @return 缓存的状态信息 * */ public CacheStatus getStatus(); /** * 获取当前缓存的名字 * * @return 缓存的名字 * */ public String getName(); /** * 设置当前缓存的名字 * * @param name 设置给当前缓存的名字,如果为null或者""则抛出异常 * */ public void SetName(String name) throws IllegalArgumentException; /** * 子类实现缓存描述信息 * * @return 该缓存描述信息 * */ public String toString(); /** * 调用此方法,异步清除该缓存中所有已经过期的元素,注意如下: * *
  • 如果该缓存元素很多,那么清除的过程需要历经很长的时间
  • *
  • 可能再调用该方法的过程中,又有许多元素已经过期,那么这些过期的元素在此次不做清除
  • *
  • 当缓存元素可能很多的时候,那么调用该方法的时候要用心考虑一下元素淘汰方案
  • * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用evictExpiredElements抛出此异常 * */ public void evictExpiredElements() throws IllegalStateException,CacheException; /** * 将缓存元素写入持久化存储设备,该设备写在配置文件里面或者以编程的方式写好 * *
  • 写入完毕后才会返回,可能会持续相当长一段时间
  • * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用flush抛出此异常 * */ public void flush() throws IllegalStateException,CacheException; /** * 缓存初始化方法,将一些缓存参数从配置文件中加载或者编程设置好之后,调用此方法,进行初始化 * *
  • 该方法调用过后,该缓存已经准备好存储元素
  • * */ public void initialise(); /** * 默认先调用flush方法将该缓存中的元素写入持久化存储设备之后,释放该缓存所占资源,该缓存将不再提供服务 * * @throws CacheException 缓存系统出现异常所抛 * @throws IllegalStateException 当缓存不处于服务状态的时候调用flush抛出此异常 * */ public void dispose() throws IllegalStateException,CacheException; /** * 获取该层缓存的配置组件信息 * * @return 该层缓存的配置组件信息 * */ public CacheConfigComponent getCacheConfigComponent(); /** * 给该缓存设置配置组件 * * @param configComponent 待设置的配置组件 * */ public void SetCacheConfigComponent(CacheConfigComponent configComponent); /** * 给该缓存注册一个缓存元素loader,loader的存在主要为了如下情况考虑 * *
  • 缓存挂了重启之后,直接从被持久化的物理存储设备中加载已经被缓存的元素
  • *
  • 从其他的主从兄弟节点,加载缓存数据,相当于远程拷贝
  • * * @param 待注册的缓存元素加载器 */ public void registerCacheLoader(CacheLoader cacheLoader); /** * 将一个已经注册的缓存元素加载器从该缓存中移除 * * @param 待移除的缓存加载器 */ public void unregisterCacheLoader(CacheLoader cacheLoader); /** * 设置该缓存的过期元素淘汰策略 * * @param outPolicy 设置的缓存过期元素的淘汰策略 * */ public void setOutPolicy(CacheOutPolicy outPolicy); /** * 获取该缓存的过期元素淘汰策略 * * @return 该缓存的过期元素淘汰策略 * */ public CacheOutPolicy getOutPolicy(); }