feat(session): a unified Redis session client that supports switching between underlying clients#611
Conversation
# Conflicts: # agentscope-dependencies-bom/pom.xml
|
|
Summary of ChangesHello @benym, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the Redis session management within AgentScope by introducing a unified RedisSession client. This new implementation leverages an adapter pattern to abstract away the underlying Redis client library, enabling seamless integration with Jedis, Lettuce, and Redisson, and supporting diverse Redis deployment topologies like standalone, cluster, and sentinel. This change streamlines the session management API, reduces code duplication, and improves flexibility for users operating in various production environments. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
|
ptal,thx @AlbumenJ @chickenlj |
There was a problem hiding this comment.
Code Review
This pull request introduces a unified RedisSession client, which is a significant improvement for supporting various Redis clients (Jedis, Lettuce, Redisson) and deployment modes. The use of the adapter pattern is well-executed. I've identified a few areas for improvement, primarily concerning performance and documentation accuracy. The Jedis and Lettuce adapters currently use the KEYS command, which can pose a performance risk in production; I've suggested switching to SCAN. Additionally, there are some inaccuracies in Javadoc and README examples that should be corrected for clarity. Overall, this is a great feature addition.
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
|
done. please check again. @AlbumenJ |
|
I made the following modifications, please review again @LearningGp :
|
… between underlying clients (agentscope-ai#611) ## AgentScope-Java Version 1.0.8-SNAPSHOT ## Description releted to agentscope-ai#610 ### Background The current JedisSeesion uses JedisPool, which only supports standalone scenarios. In production environments, users mostly use more complex deployment methods, such as sentinels, clusters, and master-slave setups. Furthermore, in a Java environment, users may use different Redis client implementations, such as `Jedis`, `Lettuce`, and `Redisson`. If each is used independently, scaling up with different Redis client implementations would result in `a lot of duplicate code`. Moreover, naming conventions like JedisSeesion are unclear, as they are all essentially types of Redis clients. ### New Feature - **Unified the RedisSession client**: using the adapter pattern to implement different underlying Redis clients, and consolidated the duplicate code that was originally scattered across various client implementations into the RedisSession. - **Various Redis deployment modes**: Jedis, Lettuce, Redisson adopt more modern APIs and support various deployment modes such as standalone, sentinel, cluster, and master-slave. - **README**: Add a README introduction for the `agentscope-extensions-session-redis` module The newly added codes all have complete javadoc documentation and the `mvn test` has passed. ### Modify - Added lettuce dependency - Add the "deprecated" tag to the old versions of JedisSession and RedissonSession, and update the corresponding javadoc. ### New Usage #### Jedis Usage Examples - Jedis Standalone (using RedisClient): ```java // 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) ```java // 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) ```java // 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 ```java // Create Lettuce RedisClient RedisClient redisClient = RedisClient.create("redis://localhost:6379"); // Build RedisSession Session session = RedisSession.builder() .lettuceClient(redisClient) .build(); ``` - Lettuce Cluster ```java // Create Lettuce RedisClient for cluster RedisURI clusterUri = RedisURI.create("redis://localhost:7000"); RedisClient redisClient = RedisClient.create(clusterUri); // Build RedisSession Session session = RedisSession.builder() .lettuceClient(redisClient) .build(); ``` - Lettuce Sentinel ```java // 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 ```java // 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(); ``` ## Checklist Please check the following items before code is ready to be reviewed. - [x] Code has been formatted with `mvn spotless:apply` - [x] All tests are passing (`mvn test`) - [x] Javadoc comments are complete and follow project conventions - [x] Related documentation has been updated (e.g. links, examples, etc.) - [x] Code is ready for review
AgentScope-Java Version
1.0.8-SNAPSHOT
Description
releted to #610
Background
The current JedisSeesion uses JedisPool, which only supports standalone scenarios. In production environments, users mostly use more complex deployment methods, such as sentinels, clusters, and master-slave setups. Furthermore, in a Java environment, users may use different Redis client implementations, such as
Jedis,Lettuce, andRedisson. If each is used independently, scaling up with different Redis client implementations would result ina lot of duplicate code. Moreover, naming conventions like JedisSeesion are unclear, as they are all essentially types of Redis clients.New Feature
agentscope-extensions-session-redismoduleThe newly added codes all have complete javadoc documentation and the
mvn testhas passed.Modify
New Usage
Jedis Usage Examples
Lettuce Usage Examples
Redisson Usage Example
Checklist
Please check the following items before code is ready to be reviewed.
mvn spotless:applymvn test)