Skip to content

Connect to Aerospike

Learn how to connect to an Aerospike cluster, configure connection options, and create sessions for database operations.

Basic connection

The simplest way to connect to Aerospike:

import com.aerospike.client.sdk.policy.Behavior;
import com.aerospike.client.sdk.Cluster;
import com.aerospike.client.sdk.ClusterDefinition;
import com.aerospike.client.sdk.Session;
try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {
Session session = cluster.createSession(Behavior.DEFAULT);
// Use the session...
}

📖 API reference: ClusterDefinition.connect() (Java and Python). The Python SDK also offers the Client(...) context-manager shortcut shown above.

Connection concepts

Cluster vs. session

ConceptPurposeLifecycle
ClusterManages node discovery and pooled network resourcesOne per application, long-lived
SessionExecutes operations using a chosen behaviorCreated from a cluster, lightweight

Pattern: Create one Cluster at startup, then create one or more Session objects from it.

Behaviors

A Behavior defines operation semantics (timeouts, retries, and consistency). Most applications start with Behavior.DEFAULT.

BehaviorBest For
DEFAULTGeneral use, balanced defaults
Derived behaviorTargeted tuning for a specific workload

See Behaviors for details.

Connect to multiple hosts

For production clusters, specify multiple seed nodes:

import com.aerospike.client.sdk.Cluster;
import com.aerospike.client.sdk.ClusterDefinition;
import com.aerospike.client.sdk.Host;
Cluster cluster = new ClusterDefinition(
new Host("node1.example.com", 3000),
new Host("node2.example.com", 3000),
new Host("node3.example.com", 3000)
).connect();

The client discovers cluster topology from seed hosts. You do not need to list every node.

Connect with authentication

For clusters with authentication enabled:

Cluster cluster = new ClusterDefinition("localhost", 3000)
.withNativeCredentials("username", "password")
.connect();
String user = System.getenv("AEROSPIKE_USER");
String pass = System.getenv("AEROSPIKE_PASSWORD");
Cluster cluster = new ClusterDefinition("localhost", 3000)
.withNativeCredentials(user, pass)
.connect();

Connect with TLS

For TLS-encrypted connections:

Cluster cluster = new ClusterDefinition("secure.example.com", 4333)
.withTlsConfig(tls -> tls
.tlsName("aerospike-server")
// Using PEM files
.caFile("/path/to/ca.pem")
.clientCertFile("/path/to/client-cert.pem")
.clientKeyFile("/path/to/client-key.pem")
// Or, to use JKS
// .trustStore("/path/to/truststore.jks", "truststorePassword", "JKS")
// .keyStore("/path/to/keystore.jks", "keystorePassword", "JKS")
)
.connect();

Connection options

Configure advanced connection settings:

import java.time.Duration;
import com.aerospike.client.sdk.ClusterDefinition;
Cluster cluster = new ClusterDefinition("localhost", 3000)
.tendTimeout(1000) // milliseconds
.loginTimeout(3000) // milliseconds
.withSystemSettings(builder -> builder
.connections(ops -> ops
.minimumConnectionsPerNode(10)
.maximumConnectionsPerNode(100)
)
.refresh(ops -> ops
.tendInterval(Duration.ofSeconds(1))
)
)
.connect();

Creating multiple sessions

Create different sessions for different application workflows:

import com.aerospike.client.sdk.policy.Behavior;
import com.aerospike.client.sdk.Cluster;
import com.aerospike.client.sdk.ClusterDefinition;
import com.aerospike.client.sdk.Session;
Cluster cluster = new ClusterDefinition("localhost", 3000).connect();
Behavior reportingBehavior = Behavior.DEFAULT.deriveWithChanges("reporting", builder -> builder
.on(Selectors.all(), ops -> ops
.abandonCallAfter(Duration.ofSeconds(60))
)
);
Session defaultSession = cluster.createSession(Behavior.DEFAULT);
Session reportingSession = cluster.createSession(reportingBehavior);

Using context managers (Python)

Python supports async context managers for automatic cleanup:

import asyncio
from aerospike_sdk import Behavior, ClusterDefinition
async def main():
async with await ClusterDefinition("localhost", 3000).connect() as cluster:
session = cluster.create_session(Behavior.DEFAULT)
# Do work...
asyncio.run(main())

Connection lifecycle

import com.aerospike.client.sdk.policy.Behavior;
import com.aerospike.client.sdk.Cluster;
import com.aerospike.client.sdk.ClusterDefinition;
import com.aerospike.client.sdk.Session;
public class App {
public static void main(String[] args) {
try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {
Session session = cluster.createSession(Behavior.DEFAULT);
// Do work...
}
}
}

Complete example

import com.aerospike.client.sdk.policy.Behavior;
import com.aerospike.client.sdk.Cluster;
import com.aerospike.client.sdk.ClusterDefinition;
import com.aerospike.client.sdk.DataSet;
import com.aerospike.client.sdk.Record;
import com.aerospike.client.sdk.RecordResult;
import com.aerospike.client.sdk.RecordStream;
import com.aerospike.client.sdk.Session;
import java.util.Optional;
public class ConnectExample {
public static void main(String[] args) {
DataSet users = DataSet.of("test", "users");
try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {
Session session = cluster.createSession(Behavior.DEFAULT);
// Write a record.
session.upsert(users)
.bins("name", "status", "age")
.id("connect-example-user").values("Alice", "active", 28)
.execute();
// Read it back.
Optional<RecordResult> readBack = session
.query(users.id("connect-example-user"))
.execute()
.getFirst();
readBack.ifPresent(rr -> System.out.println(
"Read user: " + rr.recordOrThrow().bins));
// Query active users.
RecordStream queryStream = session.query(users)
.where("$.status == 'active'")
.execute();
queryStream.forEach(recResult -> {
Record record = recResult.recordOrThrow();
if (record != null) {
System.out.println("Active user: " + record.getString("name"));
}
});
// Cleanup for repeatable runs.
session.delete(users.id("connect-example-user")).execute();
}
}
}

Troubleshooting

Connection refused

Error: Connection refused to localhost:3000

Causes:

  • Aerospike is not running
  • Wrong host or port
  • Firewall blocking the connection

Solutions:

  1. Verify Aerospike is running: systemctl status aerospike or docker ps
  2. Check the port: default is 3000 for client connections
  3. Test connectivity: nc -zv localhost 3000

Authentication failed

Error: Authentication failed

Solutions:

  1. Verify credentials are correct
  2. Check the user has appropriate permissions
  3. Ensure authentication is enabled on the cluster

TLS handshake failed

Error: SSL handshake failed

Solutions:

  1. Verify certificate paths are correct
  2. Check certificate expiration: openssl x509 -enddate -noout -in cert.pem
  3. Ensure CA certificate matches the server’s certificate chain

Next steps

Behaviors

Learn about timeouts, retries, and consistency.

Behaviors →

Feedback

Was this page helpful?

What type of feedback are you giving?

What would you like us to know?

+Capture screenshot

Can we reach out to you?