FalkorDB Java client
<dependencies>
<dependency>
<groupId>com.falkordb</groupId>
<artifactId>jfalkordb</artifactId>
<version>0.7.0</version>
</dependency>
</dependencies> <repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>and
<dependencies>
<dependency>
<groupId>com.falkordb</groupId>
<artifactId>jfalkordb</artifactId>
<version>0.8.0-SNAPSHOT</version>
</dependency>
</dependencies>package com.falkordb;
import com.falkordb.graph_entities.Edge;
import com.falkordb.graph_entities.Node;
import com.falkordb.graph_entities.Path;
import com.falkordb.Graph;
import com.falkordb.GraphContext;
import com.falkordb.GraphContextGenerator;
import com.falkordb.GraphTransaction;
import com.falkordb.Record;
import com.falkordb.ResultSet;
import com.falkordb.FalkorDB;
import com.falkordb.Driver;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GraphExample {
public static void main(String[] args) {
// general context api. Not bound to graph key or connection
Driver driver = FalkorDB.driver();
Graph graph = driver.graph("social");
Map<String, Object> params = new HashMap<>();
params.put("age", 30);
params.put("name", "amit");
// send queries to a specific graph called "social"
graph.query("CREATE (:person{name:'roi',age:32})");
graph.query("CREATE (:person{name:$name,age:$age})", params);
graph.query("MATCH (a:person), (b:person) WHERE (a.name = 'roi' AND b.name='amit') CREATE (a)-[:knows]->(b)");
ResultSet resultSet = graph.query("MATCH (a:person)-[r:knows]->(b:person) RETURN a, r, b");
// iterate over result set
for(Record record: resultSet) {
// get values
Node n = record.getValue("a");
Edge e = record.getValue("r");
//print record
System.out.println("Node: " + n + ", Edge: " + e);
}
resultSet = graph.query("MATCH p = (:person)-[:knows]->(:person) RETURN p");
for(Record record: resultSet) {
Path p = record.getValue("p");
// More path API at Javadoc.
System.out.println(p.nodeCount());
}
// delete graph
graph.deleteGraph();
GraphContextGenerator contextGraph = driver.graph("contextSocial");
// get connection context - closable object
try(GraphContext context = contextGraph.getContext()) {
context.query("CREATE (:person{name:'roi',age:32})");
context.query("MATCH (a:person), (b:person) WHERE (a.name = 'roi' AND b.name='amit') CREATE (a)-[:knows]->(b)");
// WATCH/MULTI/EXEC
context.watch("contextSocial");
GraphTransaction t = context.multi();
t.query("MATCH (a:person)-[r:knows]->(b:person{name:$name,age:$age}) RETURN a, r, b", params);
// support for Redis/Jedis native commands in transaction
t.set("x", "1");
t.get("x");
// get multi/exec results
List<Object> execResults = t.exec();
System.out.println(execResults.toString());
context.deleteGraph();
}
}
}You can customize the connection pool to optimize performance and resource usage. JFalkorDB uses Jedis internally, which provides comprehensive pool configuration options.
Pool Configuration Guidelines:
maxTotal: Maximum number of connections (size according to your application's concurrency needs)maxIdle: Maximum idle connections kept in the pool (recommended:maxTotal / 4to balance resource usage and responsiveness; increase for applications with high traffic variability)minIdle: Minimum idle connections to keep ready (recommended:maxIdle / 4for steady performance)maxWait: Maximum time to wait for a connection when pool is exhausted
import com.falkordb.Driver;
import com.falkordb.impl.api.DriverImpl;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
// Create a custom pool configuration
JedisPoolConfig poolConfig = new JedisPoolConfig();
// Maximum number of connections in the pool
poolConfig.setMaxTotal(128);
// Maximum number of idle connections in the pool
// Recommended: Set to maxTotal / 4 for optimal resource usage
poolConfig.setMaxIdle(32); // 128 / 4 = 32
// Minimum number of idle connections in the pool
poolConfig.setMinIdle(8);
// Maximum time to wait for a connection (ms)
poolConfig.setMaxWait(Duration.ofSeconds(30));
// Test connections before borrowing from pool
poolConfig.setTestOnBorrow(true);
// Test connections when returning to pool
poolConfig.setTestOnReturn(true);
// Test idle connections in the pool
poolConfig.setTestWhileIdle(true);
// Create a JedisPool with custom configuration
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);
// Create the driver with the custom pool
Driver driver = new DriverImpl(jedisPool);
// Use the driver
// ... your code here ...
// Don't forget to close the driver when done
driver.close();import com.falkordb.Driver;
import com.falkordb.impl.api.DriverImpl;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisClientConfig;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPort;
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(64);
poolConfig.setMaxIdle(16); // 64 / 4 = 16
poolConfig.setMinIdle(4);
// Configure authentication
JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
.user("default") // username
.password("your-password") // password
.build();
// Create pool with authentication and custom pool config
HostAndPort hostAndPort = new HostAndPort("localhost", 6379);
JedisPool jedisPool = new JedisPool(poolConfig, hostAndPort, clientConfig);
Driver driver = new DriverImpl(jedisPool);import com.falkordb.Driver;
import com.falkordb.impl.api.DriverImpl;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisClientConfig;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPort;
import java.time.Duration;
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(32); // 128 / 4 = 32
poolConfig.setMinIdle(8);
poolConfig.setMaxWait(Duration.ofSeconds(30));
// Configure connection and socket timeouts
JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
.connectionTimeoutMillis(2000) // Connection timeout: time to establish connection
.socketTimeoutMillis(5000) // Socket timeout: time to wait for response
.user("default") // Username for authentication
.password("your-password") // Password for authentication
.build();
// Create pool with advanced configuration
HostAndPort hostAndPort = new HostAndPort("localhost", 6379);
JedisPool jedisPool = new JedisPool(poolConfig, hostAndPort, clientConfig);
Driver driver = new DriverImpl(jedisPool);import com.falkordb.Driver;
import com.falkordb.impl.api.DriverImpl;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisClientConfig;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPort;
import javax.net.ssl.SSLSocketFactory;
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(64);
poolConfig.setMaxIdle(16); // 64 / 4 = 16
poolConfig.setMinIdle(4);
// Configure SSL connection
JedisClientConfig clientConfig = DefaultJedisClientConfig.builder()
.ssl(true)
.sslSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault())
.user("default")
.password("your-password")
.build();
HostAndPort hostAndPort = new HostAndPort("your-server.com", 6380);
JedisPool jedisPool = new JedisPool(poolConfig, hostAndPort, clientConfig);
Driver driver = new DriverImpl(jedisPool);For more information about Jedis pool configuration options, see the Jedis documentation.
JFalkorDB is licensed under the BSD-3-Clause license .