@@ -17,6 +17,7 @@ package org.springframework.data.redis.connection;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.springframework.data.domain.Range;
|
||||
import org.springframework.data.redis.core.types.Expiration;
|
||||
@@ -58,10 +59,13 @@ public interface RedisStringCommands {
|
||||
|
||||
/**
|
||||
* Return the value at {@code key} and expire the key by applying {@link Expiration}.
|
||||
* <p />
|
||||
* Use {@link Expiration#seconds(long)} for {@code EX}. <br />
|
||||
* Use {@link Expiration#milliseconds(long)} for {@code PX}. <br />
|
||||
* Use {@link Expiration#unixTimestamp(long, TimeUnit)} for {@code EXAT | PXAT}. <br />
|
||||
*
|
||||
* @param key must not be {@literal null}.
|
||||
* @param expiration must not be {@literal null}.
|
||||
* @param unit must not be {@literal null}.
|
||||
* @return {@literal null} when key does not exist or used in pipeline / transaction.
|
||||
* @see <a href="https://redis.io/commands/getex">Redis Documentation: GETEX</a>
|
||||
* @since 2.6
|
||||
|
||||
@@ -443,12 +443,13 @@ public abstract class JedisConverters extends Converters {
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a given {@link Expiration} to the according {@code GETEX} command argument.
|
||||
* Converts a given {@link Expiration} to the according {@code GETEX} command argument depending on
|
||||
* {@link Expiration#isUnixTimestamp()}.
|
||||
* <dl>
|
||||
* <dt>{@link TimeUnit#MILLISECONDS}</dt>
|
||||
* <dd>{@code PX}</dd>
|
||||
* <dd>{@code PX|PXAT}</dd>
|
||||
* <dt>{@link TimeUnit#SECONDS}</dt>
|
||||
* <dd>{@code EX}</dd>
|
||||
* <dd>{@code EX|EXAT}</dd>
|
||||
* </dl>
|
||||
*
|
||||
* @param expiration must not be {@literal null}.
|
||||
@@ -464,10 +465,14 @@ public abstract class JedisConverters extends Converters {
|
||||
}
|
||||
|
||||
if (expiration.getTimeUnit() == TimeUnit.MILLISECONDS) {
|
||||
if (expiration.isUnixTimestamp()) {
|
||||
return params.pxAt(expiration.getExpirationTime());
|
||||
}
|
||||
return params.px(expiration.getExpirationTime());
|
||||
}
|
||||
|
||||
return params.ex((int) expiration.getExpirationTime());
|
||||
return expiration.isUnixTimestamp() ? params.exAt(expiration.getConverted(TimeUnit.SECONDS))
|
||||
: params.ex(expiration.getConverted(TimeUnit.SECONDS));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -728,32 +728,31 @@ public abstract class LettuceConverters extends Converters {
|
||||
/**
|
||||
* Convert {@link Expiration} to {@link GetExArgs}.
|
||||
*
|
||||
* @param expiration
|
||||
* @param expiration can be {@literal null}.
|
||||
* @return
|
||||
* @since 2.6
|
||||
*/
|
||||
static GetExArgs toGetExArgs(Expiration expiration) {
|
||||
static GetExArgs toGetExArgs(@Nullable Expiration expiration) {
|
||||
|
||||
GetExArgs args = new GetExArgs();
|
||||
|
||||
if (expiration != null) {
|
||||
|
||||
if (expiration.isPersistent()) {
|
||||
args.persist();
|
||||
} else if (!expiration.isPersistent()) {
|
||||
|
||||
switch (expiration.getTimeUnit()) {
|
||||
case SECONDS:
|
||||
args.ex(expiration.getExpirationTime());
|
||||
break;
|
||||
default:
|
||||
args.px(expiration.getConverted(TimeUnit.MILLISECONDS));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (expiration == null) {
|
||||
return args;
|
||||
}
|
||||
|
||||
return args;
|
||||
if(expiration.isPersistent()) {
|
||||
return args.persist();
|
||||
}
|
||||
|
||||
if (expiration.getTimeUnit() == TimeUnit.MILLISECONDS) {
|
||||
if (expiration.isUnixTimestamp()) {
|
||||
return args.pxAt(expiration.getExpirationTime());
|
||||
}
|
||||
return args.px(expiration.getExpirationTime());
|
||||
}
|
||||
|
||||
return expiration.isUnixTimestamp() ? args.exAt(expiration.getConverted(TimeUnit.SECONDS))
|
||||
: args.ex(expiration.getConverted(TimeUnit.SECONDS));
|
||||
}
|
||||
|
||||
static Converter<List<byte[]>, Long> toTimeConverter(TimeUnit timeUnit) {
|
||||
|
||||
@@ -115,6 +115,17 @@ public class Expiration {
|
||||
return new Expiration(expirationTime, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new {@link Expiration} with the given {@literal unix timestamp} and {@link TimeUnit}.
|
||||
*
|
||||
* @param unixTimestamp the unix timestamp at which the key will expire.
|
||||
* @param timeUnit must not be {@literal null}.
|
||||
* @return new instance of {@link Expiration}.
|
||||
*/
|
||||
public static Expiration unixTimestamp(long unixTimestamp, TimeUnit timeUnit) {
|
||||
return new ExpireAt(unixTimestamp, timeUnit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtain an {@link Expiration} that indicates to keep the existing one. Eg. when sending a {@code SET} command.
|
||||
* <p />
|
||||
@@ -197,6 +208,14 @@ public class Expiration {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@literal true} if {@link Expiration} is set to a specified Unix time at which the key will expire.
|
||||
* @since 2.6
|
||||
*/
|
||||
public boolean isUnixTimestamp() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
* @since 2.4
|
||||
@@ -214,4 +233,19 @@ public class Expiration {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
* @since 2.6
|
||||
*/
|
||||
private static class ExpireAt extends Expiration {
|
||||
|
||||
private ExpireAt(long expirationTime, @Nullable TimeUnit timeUnit) {
|
||||
super(expirationTime, timeUnit);
|
||||
}
|
||||
|
||||
public boolean isUnixTimestamp() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user