add a layer of caching for directory props.
This commit is contained in:
parent
6dd333992e
commit
fdc1f4deea
1 changed files with 20 additions and 1 deletions
|
|
@ -7,6 +7,8 @@ import java.io.IOException;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.sleepycat.bind.tuple.TupleBinding;
|
import com.sleepycat.bind.tuple.TupleBinding;
|
||||||
import com.sleepycat.bind.tuple.TupleInput;
|
import com.sleepycat.bind.tuple.TupleInput;
|
||||||
|
|
@ -28,6 +30,13 @@ public class DirectoryDatabase extends TupleBinding<DirectoryProps> {
|
||||||
|
|
||||||
private Environment environment;
|
private Environment environment;
|
||||||
private Database db;
|
private Database db;
|
||||||
|
private LinkedHashMap<String, DirectoryProps> cache = new LinkedHashMap<String, DirectoryProps>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeEldestEntry(Map.Entry<String, DirectoryProps> entry) {
|
||||||
|
return size() >= 200;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public DirectoryDatabase(Environment environment) {
|
public DirectoryDatabase(Environment environment) {
|
||||||
|
|
||||||
|
|
@ -50,6 +59,15 @@ public class DirectoryDatabase extends TupleBinding<DirectoryProps> {
|
||||||
return db.count();
|
return db.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized DirectoryProps get(String key) {
|
||||||
|
DirectoryProps props = cache.get(key);
|
||||||
|
if (props == null) {
|
||||||
|
props = load(key);
|
||||||
|
cache.put(key, props);
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
public DirectoryProps load(String key) {
|
public DirectoryProps load(String key) {
|
||||||
|
|
||||||
DatabaseEntry data = new DatabaseEntry();
|
DatabaseEntry data = new DatabaseEntry();
|
||||||
|
|
@ -63,7 +81,7 @@ public class DirectoryDatabase extends TupleBinding<DirectoryProps> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void store(String key, DirectoryProps img) {
|
public synchronized void store(String key, DirectoryProps img) {
|
||||||
|
|
||||||
DatabaseEntry data = new DatabaseEntry();
|
DatabaseEntry data = new DatabaseEntry();
|
||||||
objectToEntry(img, data);
|
objectToEntry(img, data);
|
||||||
|
|
@ -71,6 +89,7 @@ public class DirectoryDatabase extends TupleBinding<DirectoryProps> {
|
||||||
Transaction txn = environment.beginTransaction(null, null);
|
Transaction txn = environment.beginTransaction(null, null);
|
||||||
db.delete(txn, binKey);
|
db.delete(txn, binKey);
|
||||||
db.put(txn, binKey, data);
|
db.put(txn, binKey, data);
|
||||||
|
cache.remove(key);
|
||||||
txn.commitSync();
|
txn.commitSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue