疯狂的狮子li
2022-07-22 a8d798c38a6e7fb186b6d8a20953af200caefc8c
fix 修复 RedisUtils 并发 set ttl 错误问题
已修改1个文件
13 ■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/RedisUtils.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/RedisUtils.java
@@ -110,14 +110,13 @@
     * @since Redis 6.X 以上使用 setAndKeepTTL 兼容 5.X 方案
     */
    public static <T> void setCacheObject(final String key, final T value, final boolean isSaveTtl) {
        RBucket<Object> bucket = CLIENT.getBucket(key);
        RBucket<T> bucket = CLIENT.getBucket(key);
        if (isSaveTtl) {
            try {
                bucket.setAndKeepTTL(value);
            } catch (Exception e) {
                long timeToLive = bucket.remainTimeToLive();
                bucket.set(value);
                bucket.expire(Duration.ofMillis(timeToLive));
                setCacheObject(key, value, Duration.ofMillis(timeToLive));
            }
        } else {
            bucket.set(value);
@@ -132,9 +131,11 @@
     * @param duration 时间
     */
    public static <T> void setCacheObject(final String key, final T value, final Duration duration) {
        RBucket<T> result = CLIENT.getBucket(key);
        result.set(value);
        result.expire(duration);
        RBatch batch = CLIENT.createBatch();
        RBucketAsync<T> bucket = batch.getBucket(key);
        bucket.setAsync(value);
        bucket.expireAsync(duration);
        batch.execute();
    }
    /**