Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions redisw/src/main/java/com/arcadedb/redis/RedisNetworkExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,18 @@ private void executeCommand(final Object command) {
getDel(list);
break;

case "EXISTS":
exists(list);
break;

case "HDEL":
hDel(list);
break;

case "HEXISTS":
hExists(list);
break;

case "HGET":
hGet(list);
break;
Expand All @@ -162,6 +170,10 @@ private void executeCommand(final Object command) {
incrBy(list, true);
break;

case "PING":
ping(list);
break;

case "SET":
set(list);
break;
Expand Down Expand Up @@ -199,6 +211,15 @@ private void decrBy(final List<Object> list) {
value.append(newValue);
}

private void exists(final List<Object> list) {
final String k = (String) list.get(1);
int total = 0;
for (int i = 1; i < list.size(); i++)
total += defaultBucket.containsKey(list.get(i)) ? 1 : 0;

respondValue(total, false);
}

private void get(final List<Object> list) {
final String k = (String) list.get(1);
final Object v = defaultBucket.get(k);
Expand Down Expand Up @@ -253,6 +274,14 @@ private void hDel(final List<Object> list) {
value.append(deleted);
}

private void hExists(final List<Object> list) {
final String bucketName = (String) list.get(1);
final String key = (String) list.get(2);

final Record record = getRecord(bucketName, key);
respondValue(record != null ? 1 : 0, false);
}

private void hGet(final List<Object> list) {
final String bucketName = (String) list.get(1);
final String key = (String) list.get(2);
Expand Down Expand Up @@ -339,6 +368,12 @@ private void set(final List<Object> list) {
value.append("OK");
}

private void ping(final List<Object> list) {
final String response = list.size() > 1 ? (String) list.get(1) : "PONG";
value.append("+");
value.append(response);
}

private Object parseNext() throws IOException {
final byte b = readNext();

Expand Down
61 changes: 47 additions & 14 deletions redisw/src/test/java/com/arcadedb/redis/RedisWTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,37 @@ public class RedisWTest extends BaseGraphServerTest {
public void testRAMCommands() {
Jedis jedis = new Jedis("localhost", DEF_PORT);

// PING
Assertions.assertEquals("PONG", jedis.ping());
Assertions.assertEquals("This is a test", jedis.ping("This is a test"));

// SET
long beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_RAM; ++i)
jedis.set("foo" + i, String.valueOf(i));
System.out.println("SET " + TOTAL_RAM + " items in the default bucket. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");

// EXISTS
Assertions.assertFalse(jedis.exists("fooNotFound"));

beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_RAM; ++i)
Assertions.assertTrue(jedis.exists("foo" + i));
System.out.println("EXISTS " + TOTAL_RAM + " items in the default bucket. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");

Assertions.assertEquals(0, jedis.exists("fooNotFound", "eitherThis"));

beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_RAM; i += 10) {
final String[] keyChunk = new String[10];
for (int k = 0; k < 10; ++k)
keyChunk[k] = "foo" + (i + k);
Long result = jedis.exists(keyChunk);
Assertions.assertEquals(10, result);
}
System.out.println(
"MULTI EXISTS (chunk of 10 keys) " + TOTAL_RAM + " items in the default bucket. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");

// GET
beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_RAM; ++i)
Expand Down Expand Up @@ -90,18 +115,6 @@ public void testRAMCommands() {
Assertions.assertNull(jedis.get("foo" + i));
}

@Test
public void testCommandNotSupported() {
Jedis jedis = new Jedis("localhost", DEF_PORT);
try {
jedis.aclList();
Assertions.fail();
} catch (JedisDataException e) {
// EXPECTED
Assertions.assertEquals("Command not found", e.getMessage());
}
}

@Test
public void testPersistentCommands() {
Jedis jedis = new Jedis("localhost", DEF_PORT);
Expand All @@ -120,6 +133,15 @@ public void testPersistentCommands() {
jedis.hset(getDatabaseName(), "Account", "{'id':" + i + ",'email':'jay.miner" + i + "@commodore.com','firstName':'Jay','lastName':'Miner'}");
System.out.println("HSET " + TOTAL_PERSISTENT + " items to the database. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");

// HEXISTS
beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_PERSISTENT; ++i) {
// RETRIEVE BY ID (LONG)
Assertions.assertTrue(jedis.hexists(getDatabaseName() + ".Account[id]", String.valueOf(i)));
Assertions.assertTrue(jedis.hexists(getDatabaseName() + ".Account[email]", "jay.miner" + i + "@commodore.com"));
}
System.out.println("HEXISTS " + TOTAL_PERSISTENT + " items to the database. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");

// HGET
beginTime = System.currentTimeMillis();
JSONObject expectedJson = new JSONObject("{'firstName':'Jay','lastName':'Miner'}");
Expand Down Expand Up @@ -176,9 +198,8 @@ public void testPersistentCommands() {
beginTime = System.currentTimeMillis();
for (int i = 0; i < TOTAL_PERSISTENT; i += 10) {
final String[] ridChunk = new String[10];
for (int k = 0; k < 10; ++k) {
for (int k = 0; k < 10; ++k)
ridChunk[k] = rids.get(i + k).toString();
}

// RETRIEVE BY CHUNK OF 10 RIDS
final List<String> result = jedis.hmget(getDatabaseName(), ridChunk);
Expand All @@ -203,6 +224,18 @@ public void testPersistentCommands() {
System.out.println("HDEL " + TOTAL_PERSISTENT + " items from the database. Elapsed " + (System.currentTimeMillis() - beginTime) + "ms");
}

@Test
public void testCommandNotSupported() {
Jedis jedis = new Jedis("localhost", DEF_PORT);
try {
jedis.aclList();
Assertions.fail();
} catch (JedisDataException e) {
// EXPECTED
Assertions.assertEquals("Command not found", e.getMessage());
}
}

@Override
protected boolean isPopulateDatabase() {
return false;
Expand Down