diff --git a/redisson/pom.xml b/redisson/pom.xml
index 9e7ea5c08..27e47d41c 100644
--- a/redisson/pom.xml
+++ b/redisson/pom.xml
@@ -40,6 +40,13 @@
netty-transport-native-epoll
provided
+
+ io.netty.incubator
+ netty-incubator-transport-native-io_uring
+ provided
+ 0.0.21.Final
+ linux-x86_64
+
io.netty
diff --git a/redisson/src/main/java/org/redisson/config/TransportMode.java b/redisson/src/main/java/org/redisson/config/TransportMode.java
index d564f3362..5bcea36a5 100644
--- a/redisson/src/main/java/org/redisson/config/TransportMode.java
+++ b/redisson/src/main/java/org/redisson/config/TransportMode.java
@@ -38,4 +38,9 @@ public enum TransportMode {
*/
KQUEUE,
+ /**
+ * Use `io_uring` transport. Requires netty-transport-io_uring lib in classpath.
+ */
+ IO_URING,
+
}
diff --git a/redisson/src/main/java/org/redisson/connection/ServiceManager.java b/redisson/src/main/java/org/redisson/connection/ServiceManager.java
index 0ba2487e7..87aecb51b 100644
--- a/redisson/src/main/java/org/redisson/connection/ServiceManager.java
+++ b/redisson/src/main/java/org/redisson/connection/ServiceManager.java
@@ -27,6 +27,9 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.incubator.channel.uring.IOUringDatagramChannel;
+import io.netty.incubator.channel.uring.IOUringEventLoopGroup;
+import io.netty.incubator.channel.uring.IOUringSocketChannel;
import io.netty.resolver.AddressResolver;
import io.netty.resolver.AddressResolverGroup;
import io.netty.resolver.DefaultAddressResolverGroup;
@@ -154,11 +157,16 @@ public class ServiceManager {
}
this.socketChannelClass = KQueueSocketChannel.class;
- if (PlatformDependent.isAndroid()) {
- this.resolverGroup = DefaultAddressResolverGroup.INSTANCE;
+ this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
+ } else if (cfg.getTransportMode() == TransportMode.IO_URING) {
+ if (cfg.getEventLoopGroup() == null) {
+ this.group = new IOUringEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));
} else {
- this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
+ this.group = cfg.getEventLoopGroup();
}
+
+ this.socketChannelClass = IOUringSocketChannel.class;
+ this.resolverGroup = cfg.getAddressResolverGroupFactory().create(IOUringDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
} else {
if (cfg.getEventLoopGroup() == null) {
this.group = new NioEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));