RedisSession
public class RedisSession implements Session
io/agentscope/core/session/redis/RedisSession.java:179–483Redis 会话,在多次调用之间保存和恢复会话与记忆数据。位于 io.agentscope.core.session.redis 包,实现 Session。核心成员包括 builder、save、get、getList、exists、delete。
Redis-based session implementation supporting multiple Redis clients.
This implementation provides a unified interface for Redis-based session storage, supporting multiple Redis client implementations:
-
Jedis - Standalone, Cluster, Sentinel
-
Lettuce - Standalone, Cluster, Sentinel
-
Redisson - Standalone, Cluster, Sentinel, Master/Slave
The session state is stored in Redis with following key structure:
-
Single state:
{prefix}{sessionId}:{stateKey}- Redis String containing JSON -
List state:
{prefix}{sessionId}:{stateKey}:list- Redis List containing JSON items -
List hash:
{prefix}{sessionId}:{stateKey}:list:_hash- Hash for change detection -
Session marker:
{prefix}{sessionId}:_keys- Redis Set tracking all state keys
Jedis Usage Examples:
Jedis Standalone (using RedisClient):
`// Create Jedis RedisClient (new API)
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
// Build RedisSession
Session session = RedisSession.builder()
.jedisClient(redisClient)
.build();
`
Jedis Cluster (using RedisClusterClient):
`// Create Jedis RedisClusterClient
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("localhost", 7000));
nodes.add(new HostAndPort("localhost", 7001));
nodes.add(new HostAndPort("localhost", 7002));
RedisClusterClient redisClusterClient = RedisClusterClient.create(nodes);
// Build RedisSession
Session session = RedisSession.builder()
.jedisClient(redisClusterClient)
.build();
`
Jedis Sentinel (using RedisSentinelClient):
`// Create Jedis RedisSentinelClient
Set<String> sentinelNodes = new HashSet<>();
sentinelNodes.add("localhost:26379");
sentinelNodes.add("localhost:26380");
RedisSentinelClient redisSentinelClient = RedisSentinelClient.create("mymaster", sentinelNodes);
// Build RedisSession
Session session = RedisSession.builder()
.jedisClient(redisSentinelClient)
.build();
`
Lettuce Usage Examples:
Lettuce Standalone:
`// Create Lettuce RedisClient
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
// Build RedisSession
Session session = RedisSession.builder()
.lettuceClient(redisClient)
.build();
`
Lettuce Cluster:
`// Create Lettuce RedisClusterClient for cluster mode
RedisClusterClient clusterClient = RedisClusterClient.create(
RedisURI.create("localhost", 7000));
// Build RedisSession
Session session = RedisSession.builder()
.lettuceClusterClient(clusterClient)
.build();
`
Lettuce Sentinel:
`// Create Lettuce RedisClient for sentinel
RedisURI sentinelUri = RedisURI.builder()
.withSentinelMasterId("mymaster")
.withSentinel("localhost", 26379)
.withSentinel("localhost", 26380)
.build();
RedisClient redisClient = RedisClient.create(sentinelUri);
// Build RedisSession
Session session = RedisSession.builder()
.lettuceClient(redisClient)
.build();
`
Redisson Usage Example:
`// Create RedissonClient (configure as needed for your deployment mode)
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
// or for cluster: config.useClusterServers().addNodeAddress("redis://localhost:7000");
// or for sentinel: config.useSentinelServers().setMasterName("mymaster").addSentinelAddress("redis://localhost:26379");
RedissonClient redissonClient = Redisson.create(config);
// Build RedisSession
Session session = RedisSession.builder()
.redissonClient(redissonClient)
.build();
`
Custom Key Prefix Example:
`// Create Redis client
RedisClient redisClient = RedisClient.create("redis://localhost:6379");
// Build RedisSession with custom key prefix
Session session = RedisSession.builder()
.jedisClient(redisClient)
.keyPrefix("myapp:session:")
.build();
`
嵌套类摘要Nested Class Summary
| 类Class | 类型Kind | 说明Description |
|---|---|---|
Builder | 类class | `RedisSession`的构建器。 Builder for `RedisSession`. |
方法摘要Method Summary
| 方法Method | 说明Description |
|---|---|
public static Builder builder()static | 创建新的构建器用于`RedisSession`。 Creates a new builder for `RedisSession`. |
public void save(SessionKey sessionKey, String key, State value) | 保存数据到持久化存储。 Performs the save operation. |
public void save(SessionKey sessionKey, String key, List<? extends State> values) | 保存数据到持久化存储。 Performs the save operation. |
public T extends State Optional<T> get(SessionKey sessionKey, String key, Class<T> type) | 按条件读取数据。 Performs the get operation. |
public T extends State List<T> getList(SessionKey sessionKey, String key, Class<T> itemType) | 获取列表。 Returns the list. |
public boolean exists(SessionKey sessionKey) | 判断数据是否存在。 Performs the exists operation. |
public void delete(SessionKey sessionKey) | 删除数据。 Performs the delete operation. |
public Set<SessionKey> listSessionKeys() | 列出会话密钥。 Lists the session keys. |
public void close() | 关闭连接并释放相关资源。 Releases resources and connections. |
public Mono<Integer> clearAllSessions() | 清空所有会话。 Clear all sessions stored in Redis (for testing or cleanup). |
方法详情Method Detail
builder
public static Builder builder()
创建新的构建器用于RedisSession。
Creates a new builder for RedisSession.
Builderio/agentscope/core/session/redis/RedisSession.java:209–211save
public void save(SessionKey sessionKey, String key, State value)
保存数据到持久化存储。
Performs the save operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
key | String | 键(类型 `String`)。The key. |
value | State | 值(类型 `State`)。The value. |
io/agentscope/core/session/redis/RedisSession.java:213–226save
public void save(SessionKey sessionKey, String key, List<? extends State> values)
保存数据到持久化存储。
Performs the save operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
key | String | 键(类型 `String`)。The key. |
values | List<? extends State> | 值(类型 `List`)。The values. |
io/agentscope/core/session/redis/RedisSession.java:228–267get
public T extends State Optional<T> get(SessionKey sessionKey, String key, Class<T> type)
按条件读取数据。
Performs the get operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
key | String | 键(类型 `String`)。The key. |
type | Class<T> | 类型(类型 `Class`)。The type. |
Optional<T>io/agentscope/core/session/redis/RedisSession.java:269–282getList
public T extends State List<T> getList(SessionKey sessionKey, String key, Class<T> itemType)
获取列表。
Returns the list.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
key | String | 键(类型 `String`)。The key. |
itemType | Class<T> | 条目类型(类型 `Class`)。The item type. |
List<T>io/agentscope/core/session/redis/RedisSession.java:284–302exists
public boolean exists(SessionKey sessionKey)
判断数据是否存在。
Performs the exists operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
booleanio/agentscope/core/session/redis/RedisSession.java:304–315delete
public void delete(SessionKey sessionKey)
删除数据。
Performs the delete operation.
| 名称Name | 类型Type | 说明Description |
|---|---|---|
sessionKey | SessionKey | 会话键(类型 `SessionKey`)。The session key. |
io/agentscope/core/session/redis/RedisSession.java:317–349listSessionKeys
public Set<SessionKey> listSessionKeys()
列出会话密钥。
Lists the session keys.
Set<SessionKey>io/agentscope/core/session/redis/RedisSession.java:351–369close
public void close()
关闭连接并释放相关资源。
Releases resources and connections.
io/agentscope/core/session/redis/RedisSession.java:371–374clearAllSessions
public Mono<Integer> clearAllSessions()
清空所有会话。
Clear all sessions stored in Redis (for testing or cleanup).
Mono<Integer>io/agentscope/core/session/redis/RedisSession.java:381–395嵌套类详情Nested Class Detail
Builder
public static class BuilderRedisSession的构建器。位于 io.agentscope.core.session.redis 包。核心成员包括 keyPrefix、jedisClient、lettuceClient、lettuceClusterClient、redissonClient、clientAdapter。
Builder for RedisSession.
The builder supports multiple Redis client types. Only one client type should be set.
Supported client types:
-
Jedis:
#jedisClient(UnifiedJedis) -
Lettuce Standalone/Sentinel:
#lettuceClient(RedisClient) -
Lettuce Cluster:
#lettuceClusterClient(RedisClusterClient) -
Redisson:
#redissonClient(RedissonClient) -
Custom:
#clientAdapter(RedisClientAdapter)