我目前正在编写一个需要对键/值存储进行批量操作的应用程序,此时我正在使用 membase。
spymemcached 允许批量获取,但不允许批量 CAS 或添加;我认为如果实施会被广泛使用的功能。
此时我的一组批量操作的代码大致如下图所示。
“客户端”是单个 MemcachedClient。
ArrayList<Future<Boolean>> futures = new ArrayList<Future<Boolean>>();
ArrayList<String> bulkGet = new ArrayList<String>();
for(int i=0; i<50; i++){
String key = "Key_" + x + "_" + i;
Future<Boolean> fut = client.add(key, 0, "Value_" + x + "_" + i);
futures.add(fut);
bulkGet.add(key);
}
int count = 0;
for(Future<Boolean> fut : futures){
if(fut.get()==true){
count++;
}
}
System.out.println("Added " + count + " records.");
Map<String,Object> bulkGot = client.getBulk(bulkGet);
System.out.println("Retrieved " + bulkGot.size() + " records");
Future.get() 的阻塞调用似乎效率很低,有没有更好的方法?在我的实际场景中,我希望能够在它们返回后立即处理期货(这可能会或可能不会按照它们发送的顺序?)。
此外,以下操作是否可能(或计划实施)?
- 添加或返回现有值
- 如果值等于已知值,则删除
- 如果值等于已知值,则设置
谢谢,马库斯