diff --git a/src/main/java/org/redisson/RedissonExpirable.java b/src/main/java/org/redisson/RedissonExpirable.java index b43e09d57..a9d0140ff 100644 --- a/src/main/java/org/redisson/RedissonExpirable.java +++ b/src/main/java/org/redisson/RedissonExpirable.java @@ -23,6 +23,8 @@ import org.redisson.client.protocol.StringCodec; import org.redisson.connection.ConnectionManager; import org.redisson.core.RExpirable; +import io.netty.util.concurrent.Future; + abstract class RedissonExpirable extends RedissonObject implements RExpirable { RedissonExpirable(ConnectionManager connectionManager, String name) { @@ -30,28 +32,53 @@ abstract class RedissonExpirable extends RedissonObject implements RExpirable { } @Override - public boolean expire(final long timeToLive, final TimeUnit timeUnit) { - return connectionManager.write(getName(), StringCodec.INSTANCE, RedisCommands.EXPIRE, getName(), timeUnit.toSeconds(timeToLive)); + public boolean expire(long timeToLive, TimeUnit timeUnit) { + return connectionManager.get(expireAsync(timeToLive, timeUnit)); + } + + @Override + public Future expireAsync(long timeToLive, TimeUnit timeUnit) { + return connectionManager.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.EXPIRE, getName(), timeUnit.toSeconds(timeToLive)); } @Override - public boolean expireAt(final long timestamp) { - return connectionManager.write(getName(), StringCodec.INSTANCE, RedisCommands.EXPIREAT, getName(), timestamp); + public boolean expireAt(long timestamp) { + return connectionManager.get(expireAtAsync(timestamp)); } @Override - public boolean expireAt(final Date timestamp) { + public Future expireAtAsync(long timestamp) { + return connectionManager.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.EXPIREAT, getName(), timestamp); + } + + @Override + public boolean expireAt(Date timestamp) { return expireAt(timestamp.getTime() / 1000); } + @Override + public Future expireAtAsync(Date timestamp) { + return expireAtAsync(timestamp.getTime() / 1000); + } + @Override public boolean clearExpire() { - return connectionManager.write(getName(), StringCodec.INSTANCE, RedisCommands.PERSIST, getName()); + return connectionManager.get(clearExpireAsync()); + } + + @Override + public Future clearExpireAsync() { + return connectionManager.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.PERSIST, getName()); } @Override public long remainTimeToLive() { - return connectionManager.write(getName(), StringCodec.INSTANCE, RedisCommands.TTL, getName()); + return connectionManager.get(remainTimeToLiveAsync()); + } + + @Override + public Future remainTimeToLiveAsync() { + return connectionManager.readAsync(getName(), StringCodec.INSTANCE, RedisCommands.TTL, getName()); } } diff --git a/src/main/java/org/redisson/RedissonObject.java b/src/main/java/org/redisson/RedissonObject.java index 2b8df6a97..9a3d1c5d9 100644 --- a/src/main/java/org/redisson/RedissonObject.java +++ b/src/main/java/org/redisson/RedissonObject.java @@ -42,31 +42,37 @@ abstract class RedissonObject implements RObject { return connectionManager.getGroup().next().newPromise(); } + @Override public String getName() { return name; } + @Override public boolean rename(String newName) { return connectionManager.get(renameAsync(newName)); } + @Override public Future renameAsync(String newName) { return connectionManager.writeAsync(getName(), RedisCommands.RENAME, getName(), newName); } + @Override public boolean renamenx(String newName) { return connectionManager.get(renamenxAsync(newName)); } + @Override public Future renamenxAsync(String newName) { return connectionManager.writeAsync(getName(), RedisCommands.RENAMENX, getName(), newName); } - + @Override public boolean delete() { return connectionManager.get(deleteAsync()); } + @Override public Future deleteAsync() { return connectionManager.writeAsync(getName(), RedisCommands.DEL_SINGLE, getName()); } diff --git a/src/main/java/org/redisson/core/RAtomicLongAsync.java b/src/main/java/org/redisson/core/RAtomicLongAsync.java index f2ea57c33..4c3c081c0 100644 --- a/src/main/java/org/redisson/core/RAtomicLongAsync.java +++ b/src/main/java/org/redisson/core/RAtomicLongAsync.java @@ -2,7 +2,7 @@ package org.redisson.core; import io.netty.util.concurrent.Future; -public interface RAtomicLongAsync extends RExpirable { +public interface RAtomicLongAsync extends RExpirableAsync { Future compareAndSetAsync(long expect, long update); diff --git a/src/main/java/org/redisson/core/RExpirable.java b/src/main/java/org/redisson/core/RExpirable.java index 47223ee19..417ce4da6 100644 --- a/src/main/java/org/redisson/core/RExpirable.java +++ b/src/main/java/org/redisson/core/RExpirable.java @@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit; * @author Nikita Koksharov * */ -public interface RExpirable extends RObject { +public interface RExpirable extends RObject, RExpirableAsync { boolean expire(long timeToLive, TimeUnit timeUnit); diff --git a/src/main/java/org/redisson/core/RExpirableAsync.java b/src/main/java/org/redisson/core/RExpirableAsync.java new file mode 100644 index 000000000..46436470c --- /dev/null +++ b/src/main/java/org/redisson/core/RExpirableAsync.java @@ -0,0 +1,20 @@ +package org.redisson.core; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +import io.netty.util.concurrent.Future; + +public interface RExpirableAsync extends RObjectAsync { + + Future expireAsync(long timeToLive, TimeUnit timeUnit); + + Future expireAtAsync(Date timestamp); + + Future expireAtAsync(long timestamp); + + Future clearExpireAsync(); + + Future remainTimeToLiveAsync(); + +}