美文网首页
如何同步redis过期时间至caffeine

如何同步redis过期时间至caffeine

作者: 伊丽莎白菜 | 来源:发表于2022-11-30 12:28 被阅读0次

    目的

    使用caffeine+redis构建二级缓存,并且可以同步过期时间。

    1. redis可以视为集中式外部缓存,缓存及ttl只需设置一次;
    2. caffeine集成在分布式程序内部,需要通过懒加载同步redis缓存及ttl.

    代码实现

    import com.github.benmanes.caffeine.cache.Cache;
    import com.github.benmanes.caffeine.cache.Caffeine;
    import com.github.benmanes.caffeine.cache.Expiry;
    import java.util.concurrent.TimeUnit;
    import lombok.Getter;
    import org.checkerframework.checker.index.qual.NonNegative;
    import org.checkerframework.checker.nullness.qual.NonNull;
    import org.redisson.api.RedissonClient;
    
    @Getter
    public class CacheHelper {
    
      private Cache<String, Object> localCache;
      private RedissonClient redissonClient;
    
      public CacheHelper(RedissonClient redissonClient) {
        this.redissonClient = redissonClient;
        initLocalCache();
      }
    
      private void initLocalCache() {
        this.localCache = Caffeine.newBuilder().expireAfter(new Expiry<String, Object>() {
    
          @Override
          public long expireAfterCreate(@NonNull String key, @NonNull Object value, long currentTime) {
            // query ttl by redisson, you can use another redis client instead
            long ttlMillis = redissonClient.getBucket(key).remainTimeToLive();
            return TimeUnit.MILLISECONDS.toNanos(Math.max(ttlMillis, 0));
          }
    
          @Override
          public long expireAfterUpdate(@NonNull String key, @NonNull Object value, long currentTime,
              @NonNegative long currentDuration) {
            return currentDuration;
          }
    
          @Override
          public long expireAfterRead(@NonNull String key, @NonNull Object value, long currentTime,
              @NonNegative long currentDuration) {
            return currentDuration;
          }
        }).build(key -> redissonClient.getBucket(key).get());
      }
    
    }
    
    

    相关文章

      网友评论

          本文标题:如何同步redis过期时间至caffeine

          本文链接:https://www.haomeiwen.com/subject/rptsfdtx.html