diff --git a/bucket4j-parent/pom.xml b/bucket4j-parent/pom.xml
index a944e5c9..dee9142d 100644
--- a/bucket4j-parent/pom.xml
+++ b/bucket4j-parent/pom.xml
@@ -65,7 +65,7 @@
1.15.1
5.0.2.RELEASE
2.9.0
- 3.11.5
+ 3.16.8
2.9.3
diff --git a/bucket4j-redis/src/main/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManager.java b/bucket4j-redis/src/main/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManager.java
index d99069fd..21b71cf6 100644
--- a/bucket4j-redis/src/main/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManager.java
+++ b/bucket4j-redis/src/main/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManager.java
@@ -27,7 +27,9 @@
import io.netty.buffer.ByteBuf;
import org.redisson.api.RFuture;
import org.redisson.client.codec.ByteArrayCodec;
+import org.redisson.client.protocol.RedisCommand;
import org.redisson.client.protocol.RedisCommands;
+import org.redisson.client.protocol.convertor.BooleanNotNullReplayConvertor;
import org.redisson.command.CommandExecutor;
import java.io.IOException;
@@ -40,6 +42,8 @@
public class RedissonBasedProxyManager extends AbstractCompareAndSwapBasedProxyManager {
+ public static RedisCommand SETPXNX_WORK_ARROUND = new RedisCommand("SET", new BooleanNotNullReplayConvertor());
+
private final CommandExecutor commandExecutor;
private final long ttlMillis;
@@ -66,7 +70,7 @@ public Optional getStateData() {
public boolean compareAndSwap(byte[] originalData, byte[] newData) {
if (originalData == null) {
// Redisson prohibits the usage null as values, so "replace" must not be used in such cases
- RFuture redissonFuture = commandExecutor.writeAsync(key, ByteArrayCodec.INSTANCE, RedisCommands.SETPXNX, key, encodeByteArray(newData), "PX", ttlMillis, "NX");
+ RFuture redissonFuture = commandExecutor.writeAsync(key, ByteArrayCodec.INSTANCE, SETPXNX_WORK_ARROUND, key, encodeByteArray(newData), "PX", ttlMillis, "NX");
return commandExecutor.get(redissonFuture);
} else {
String script =
@@ -99,7 +103,7 @@ public CompletableFuture> getStateData() {
@Override
public CompletableFuture compareAndSwap(byte[] originalData, byte[] newData) {
if (originalData == null) {
- RFuture redissonFuture = commandExecutor.writeAsync(key, ByteArrayCodec.INSTANCE, RedisCommands.SETPXNX, key, encodeByteArray(newData), "PX", ttlMillis, "NX");
+ RFuture redissonFuture = commandExecutor.writeAsync(key, ByteArrayCodec.INSTANCE, SETPXNX_WORK_ARROUND, key, encodeByteArray(newData), "PX", ttlMillis, "NX");
return convertFuture(redissonFuture);
} else {
String script =
diff --git a/bucket4j-redis/src/test/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManagerTest.java b/bucket4j-redis/src/test/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManagerTest.java
index 74e63798..e8fe2988 100644
--- a/bucket4j-redis/src/test/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManagerTest.java
+++ b/bucket4j-redis/src/test/java/io/github/bucket4j/redis/redisson/cas/RedissonBasedProxyManagerTest.java
@@ -5,6 +5,8 @@
import io.github.bucket4j.tck.AbstractDistributedBucketTest;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.redisson.command.CommandExecutor;
+import org.redisson.command.CommandSyncService;
import org.redisson.config.Config;
import org.redisson.config.ConfigSupport;
import org.redisson.connection.ConnectionManager;
@@ -17,11 +19,13 @@ public class RedissonBasedProxyManagerTest extends AbstractDistributedBucketTest
private static GenericContainer container;
private static ConnectionManager connectionManager;
+ private static CommandExecutor commandExecutor;
@BeforeClass
public static void setup() {
container = startRedisContainer();
connectionManager = createRedissonClient(container);
+ commandExecutor = createRedissonExecutor(connectionManager);
}
@AfterClass
@@ -46,6 +50,10 @@ private static ConnectionManager createRedissonClient(GenericContainer container
return connectionManager;
}
+ private static CommandExecutor createRedissonExecutor(ConnectionManager connectionManager) {
+ return new CommandSyncService(connectionManager, null);
+ }
+
private static GenericContainer startRedisContainer() {
GenericContainer genericContainer = new GenericContainer("redis:4.0.11")
.withExposedPorts(6379);
@@ -55,7 +63,7 @@ private static GenericContainer startRedisContainer() {
@Override
protected ProxyManager getProxyManager() {
- return new RedissonBasedProxyManager(connectionManager.getCommandExecutor(), ClientSideConfig.getDefault(), Duration.ofMinutes(10));
+ return new RedissonBasedProxyManager(commandExecutor, ClientSideConfig.getDefault(), Duration.ofMinutes(10));
}
@Override