@Override
 public void remove(long[] keys, KCallback<Throwable> error) {
   int nbKeys = keys.length / 3;
   String[] elems = new String[nbKeys];
   for (int i = 0; i < nbKeys; i++) {
     elems[i] = KContentKey.toString(keys, i);
   }
   jedis.del(elems);
 }
 @Override
 public void get(long[] keys, KCallback<String[]> callback) {
   int nbKeys = keys.length / 3;
   String[] flatKeys = new String[nbKeys];
   for (int i = 0; i < nbKeys; i++) {
     flatKeys[i] = KContentKey.toString(keys, i);
   }
   List<String> values = jedis.mget(flatKeys);
   if (callback != null) {
     callback.on(values.toArray(new String[values.size()]));
   }
 }
 @Override
 public synchronized void put(
     long[] p_keys, String[] p_values, KCallback<Throwable> p_callback, int excludeListener) {
   int nbKeys = p_keys.length / 3;
   String[] elems = new String[nbKeys * 2];
   for (int i = 0; i < nbKeys; i++) {
     elems[(i * 2)] = KContentKey.toString(p_keys, i);
     elems[(i * 2) + 1] = p_values[i];
   }
   if (jedis != null) {
     jedis.mset(elems);
   }
   KMessage events = new Message();
   events.setType(Message.EVENTS_TYPE);
   events.setKeys(p_keys);
   jedis.publish("kmf", events.save());
   if (p_callback != null) {
     p_callback.on(null);
   }
 }
 @Override
 public void atomicGetIncrement(long[] key, KCallback<Short> cb) {
   String result = jedis.get(KContentKey.toString(key, 0));
   short nextV;
   short previousV;
   if (result != null) {
     try {
       previousV = Short.parseShort(result);
     } catch (Exception e) {
       e.printStackTrace();
       previousV = Short.MIN_VALUE;
     }
   } else {
     previousV = 0;
   }
   if (previousV == Short.MAX_VALUE) {
     nextV = Short.MIN_VALUE;
   } else {
     nextV = (short) (previousV + 1);
   }
   // TODO use the nativeInc method
   jedis.set(key.toString(), "" + nextV);
   cb.on(previousV);
 }