![JAR search and dependency download from the Maven repository](/logo.png)
net.jahhan.cache.repository.common.AbstractSmpTTLCountRepository Maven / Gradle / Ivy
package net.jahhan.cache.repository.common;
import java.util.EventObject;
import org.apache.commons.lang3.StringUtils;
import net.jahhan.cache.util.Counter;
import net.jahhan.cache.util.SerializerUtil;
import net.jahhan.jdbc.event.DBEvent;
import net.jahhan.jdbc.event.EventOperate;
/**
* @author nince
*/
public abstract class AbstractSmpTTLCountRepository extends AbstractSimpleRepository {
protected Counter counter = new Counter(500);
public boolean accept(EventObject event) {
return DBEvent.class.isInstance(event);
}
public void set(String id, Object object) {
String key = getKey(id);
cache.setEx(key.getBytes(), getExistSecond(), SerializerUtil.serializeFrom(object));
}
public void expire(String id) {
String key = getKey(id);
cache.expire(key, getExistSecond());
}
public Counter getCounter() {
return counter;
}
public T get(String id, Class clazz) {
if (counter.isCacheRefresh()) {
return null;
}
byte[] bytes = super.getBytes(String.valueOf(id));
if (bytes != null) {
counter.incCached();
return SerializerUtil.deserialize(bytes, clazz);
}
return null;
}
/**
* 默认的监听行为
*
* @param event
* @param checkClass
* 用于校验对象的类型
* @author nince
*/
protected void onListen(EventObject event, Class> checkClass) {
DBEvent ev = (DBEvent) event;
String id = ev.getId();
String op = ev.getOperate();
if (StringUtils.isEmpty(id)) {
return;
}
if (op.equals(EventOperate.GET)) {
if (!checkClass.isInstance(event.getSource())) {
return;
}
Object cache = get(id, checkClass);
if (null == cache) {
set(id, event.getSource());
}
expire(id);
} else if (op.equals(EventOperate.INSERT) || op.equals(EventOperate.UPDATE)) {
if (!checkClass.isInstance(event.getSource())) {
return;
}
set(id, event.getSource());
} else if (op.equals(EventOperate.PART_MODIFY)) {
merge(id, ev.getSource(), checkClass);
} else if (EventOperate.isModify(op)) {
del(id);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy