Implementation:SeleniumHQ Selenium GridRedisClient Configuration
| Knowledge Sources | |
|---|---|
| Domains | Distributed_Testing, Configuration, Selenium_Grid |
| Last Updated | 2026-02-11 00:00 GMT |
Overview
Concrete tool for Redis-backed distributed state management in Selenium Grid provided by the GridRedisClient class.
Description
GridRedisClient provides distributed state management for Selenium Grid deployments using Redis. It uses the Lettuce Redis client (RedisClient and StatefulRedisConnection) for basic key-value operations (mset, mget, get, del, getKeysByPattern) and Redisson for RLiveObjectService persistence and RSet-based availability tracking. It tracks node availability via Redisson sets keyed by Availability enum values (addNodeAvailability(), getNodesByAvailability()), enabling the Distributor to query nodes grouped by their availability state (UP, DOWN, DRAINING). Node state is persisted using Redisson's LiveObject service via addNode() (which calls service.merge()) and getNode() (which calls service.get()).
Usage
Used in distributed Grid deployments where multiple components need shared state. Configure by providing a Redis server URI. This enables stateless Grid components that can be scaled independently.
Code Reference
Source Location
- Repository: Selenium
- File: java/src/org/openqa/selenium/redis/GridRedisClient.java
- Lines: L42-174
Signature
public class GridRedisClient implements Closeable {
public GridRedisClient(URI serverUri);
public StatefulRedisConnection<String, String> getConnection();
public void mset(Map<String, String> map);
public List<KeyValue<String, String>> mget(String... keys);
public String get(String key);
public List<String> getKeysByPattern(String pattern);
public boolean isOpen();
public void del(String... var1);
public void close();
public void addNodeAvailability(Availability availability, NodeStatus node);
public void removeNodeAvailability(Availability availability, NodeStatus node);
public void addAllNodeAvailability(Availability availability, Set<NodeId> nodes);
public void removeAllNodeAvailability(Availability availability, Set<NodeId> nodes);
public boolean getNodeAvailability(Availability availability, NodeId id);
public Set<NodeId> getNodesByAvailability(Availability availability);
public void addNode(NodeStatus node);
public void removeNode(NodeId id);
public Optional<NodeStatus> getNode(NodeId id);
public void removeAllNodes(Set<NodeId> nodeIds);
public Set<NodeStatus> getNodes(Set<NodeId> nodeIds);
public Set<NodeId> getAllNodes();
}
Import
import org.openqa.selenium.redis.GridRedisClient;
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| serverUri | URI | Yes | Redis server URI (e.g., redis://localhost:6379) |
| availability | Availability | Yes (for availability ops) | Enum value: UP, DOWN, or DRAINING |
| node | NodeStatus | Yes (for add) | Node status information including NodeId, URI, and slot data |
Outputs
| Name | Type | Description |
|---|---|---|
| nodeIds | Set<NodeId> | Node identifiers grouped by availability |
| nodeStatus | Optional<NodeStatus> | Full node status retrieved from Redis LiveObject store |
| isOpen | boolean | Whether the Redis connection is active |
Usage Examples
Programmatic Usage
URI redisUri = URI.create("redis://redis-host:6379");
GridRedisClient redisClient = new GridRedisClient(redisUri);
// Store node state
redisClient.addNode(nodeStatus);
redisClient.addNodeAvailability(Availability.UP, nodeStatus);
// Query available nodes
Set<NodeId> upNodes = redisClient.getNodesByAvailability(Availability.UP);
// Retrieve specific node
Optional<NodeStatus> node = redisClient.getNode(nodeId);
// Clean up
redisClient.close();
TOML Configuration for Redis-Backed Grid
[sessions]
implementation = "org.openqa.selenium.grid.sessionmap.redis.RedisBackedSessionMap"
uri = "redis://redis-host:6379"