Skip to content

Connect to Aerospike

For the complete documentation index see: llms.txt

All documentation pages available in markdown.

Applies to

  • Aerospike Developer SDK preview (Java 21+ and Python 3.10+)
  • Aerospike Database 6.0 or later unless a section states otherwise

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

Prerequisites

  • A running Aerospike cluster reachable from your application host
  • The Developer SDK installed for Java or Python

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(String,int) | ClusterDefinition.connect() | Cluster.createSession(Behavior) | Cluster.close()

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();

📖 API reference: ClusterDefinition(Host...) | Host(String,int) | Host(String,String,int) | ClusterDefinition.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();

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | ClusterDefinition.withNativeCredentials(...)

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

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | ClusterDefinition.withNativeCredentials(...)

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();

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | ClusterDefinition.withTlsConfig(...)

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();

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | ClusterDefinition.withSystemSettings(...)

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);

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | Cluster.createSession(Behavior)

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())

📖 API reference: Behavior.DEFAULT | cluster.create_session

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...
}
}
}

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | Cluster.createSession(Behavior) | Cluster.close()

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();
}
}
}

📖 API reference: ClusterDefinition(String,int) | ClusterDefinition.connect() | Cluster.createSession(Behavior) | Cluster.close() | DataSet.of(...) | DataSet.id(...) | Session.upsert(DataSet) | Session.delete(Key) | Session.query(DataSet) | OperationObjectBuilder.bins(...) | IdValuesBuilder.id(...) | IdValuesRowBuilder.values(...) | ChainableQueryBuilder.where(...) | ChainableQueryBuilder.execute() | RecordStream.getFirst() | RecordStream.forEach(...) | RecordResult.recordOrThrow() | Record.getString(...)

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

Verify

After connecting, confirm the cluster accepts reads and writes:

  1. Define a dataset and upsert a check record (use your namespace and set, or test / example):

    DataSet example = DataSet.of("test", "example");
    session.upsert(example)
    .bins("status")
    .id("connect-check").values("ok")
    .execute();
  2. Read the record back by key:

    RecordStream stream = session.query(example.id("connect-check")).execute();
    stream.getFirst().ifPresent(result ->
    System.out.println("Status: " + result.recordOrThrow().getString("status")));
    stream.close();
  3. Expected: Upsert and read complete with no connection or authentication errors. Printed status is ok.

  4. Clean up the check record:

    session.delete(example.id("connect-check")).execute();

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?