From 1010ccca4dfa63f68f3caa87ddaadcfbe33405a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 26 Nov 2021 13:34:18 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20RedisUtils=20set?= =?UTF-8?q?=E4=BF=9D=E7=95=99ttl=20=E5=85=BC=E5=AE=B9=205.X=20redis?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/RedisUtils.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java index 89206c978..7f4d2cace 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtils.java @@ -97,12 +97,18 @@ public class RedisUtils { * @param key 缓存的键值 * @param value 缓存的值 * @param isSaveTtl 是否保留TTL有效期(例如: set之前ttl剩余90 set之后还是为90) - * @since Redis 6.0.0 以上有效 + * @since Redis 6.X 以上使用 setAndKeepTTL 兼容 5.X 方案 */ public static void setCacheObject(final String key, final T value, final boolean isSaveTtl) { RBucket bucket = client.getBucket(key); if (isSaveTtl) { - bucket.setAndKeepTTL(value); + try { + bucket.setAndKeepTTL(value); + } catch (Exception e) { + long timeToLive = bucket.remainTimeToLive(); + bucket.set(value); + bucket.expire(timeToLive, TimeUnit.MILLISECONDS); + } } else { bucket.set(value); } @@ -116,7 +122,7 @@ public class RedisUtils { * @param timeout 时间 * @param timeUnit 时间颗粒度 */ - public static void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) { + public static void setCacheObject(final String key, final T value, final long timeout, final TimeUnit timeUnit) { RBucket result = client.getBucket(key); result.set(value); result.expire(timeout, timeUnit); @@ -157,6 +163,17 @@ public class RedisUtils { return rBucket.get(); } + /** + * 获得key剩余存活时间 + * + * @param key 缓存键值 + * @return 剩余存活时间 + */ + public static long getTimeToLive(final String key) { + RBucket rBucket = client.getBucket(key); + return rBucket.remainTimeToLive(); + } + /** * 删除单个对象 *