/*
* Copyright © 2014 YAOCHEN Corporation, All Rights Reserved
*/
package com.easyooo.framework.cache.impl;
import java.text.MessageFormat;
import org.springframework.util.StringUtils;
import com.easyooo.framework.cache.KeyBuilder;
import com.easyooo.framework.cache.config.CacheBean;
/**
* 在不指定缓存KEY生成器的情况下,默认会使用该类的实例生成缓存的KEY
*
* @author Killer
*/
public class DefaultKeyBuilder implements KeyBuilder {
private final String SPLIT_CHAR = ",";
private final String KEY_FORMAT1 = "{0}({1})";
private final String KEY_FORMAT2 = "{0}({1})#{2}";
private final String KEY_FORMAT3 = "all({0})";
/**
* 根据primaryKeys参数的数量,所生成的KEY格式 <b><i>类名(主键值1,主键值2,...)</i></b>
* <p>如:CCust(张三,360124190006541234)</p>
*/
@Override
public String buildKey(CacheBean cacheBean, String ...primaryKeys) {
String prefix = cacheBean.getPrefix();
String keyStr = StringUtils.arrayToDelimitedString(primaryKeys, SPLIT_CHAR);
return MessageFormat.format(KEY_FORMAT1, prefix, keyStr);
}
/**
* 生成规则和单个实体类的缓存KEY一致,只是在KEY的末尾,增加了后缀字符,支持多个分组,
* 就像 "CUser(010112345)#cust_id" 可以看出这是一个默认的单属性分组,分组的别称是属性名称"cust_id"
* 还有比如 "CUser(数字电视,123456)#device" 在配置了多属性的分组时,就需要配置分组的别称
*/
@Override
public String buildGroupKey(CacheBean cacheBean, String groupName, String...groups) {
String prefix = cacheBean.getPrefix();
String keyStr = StringUtils.arrayToDelimitedString(groups, SPLIT_CHAR);
return MessageFormat.format(KEY_FORMAT2, prefix, keyStr, groupName);
}
@Override
public String buildMiniTableKey(CacheBean cacheBean) {
return MessageFormat.format(KEY_FORMAT3, cacheBean.getPrefix());
}
}