Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: geng david
Added: Jan 11, 2021 6:34 AM
Views: 4
Tags: no tags
  1. package com.tecjsc.warmheart.user.takeout.portal.bo.infra;
  2.  
  3. import com.github.benmanes.caffeine.cache.*;
  4. import org.checkerframework.checker.nullness.qual.NonNull;
  5. import org.checkerframework.checker.nullness.qual.Nullable;
  6.  
  7. import java.util.concurrent.TimeUnit;
  8. import java.util.function.Function;
  9.  
  10. /**
  11.  * @Author: genghongliang
  12.  * @Date: 2021/1/11 10:40
  13.  * initialCapacity: 初始的缓存空间大小
  14. maximumSize: 缓存的最大条数
  15. maximumWeight: 缓存的最大权重
  16. expireAfterAccess: 最后一次写入或访问后经过固定时间过期
  17. expireAfterWrite: 最后一次写入后经过固定时间过期
  18. expireAfter : 自定义过期策略
  19. refreshAfterWrite: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
  20. weakKeys: 打开key的弱引用
  21. weakValues:打开value的弱引用
  22. softValues:打开value的软引用
  23. recordStats:开启统计功能
  24.  
  25. FIFO 先进先出算法
  26. LRU 最近最少使用算法
  27. LFU 最不常用算法
  28.  
  29.  */
  30. public class BOCache {
  31.     public void get(){
  32.         Cache<String, String> cache = Caffeine.newBuilder()
  33.                 .maximumSize(100)
  34.                 .writer(new CacheWriter<String, String>() {
  35.                     @Override
  36.                     public void write(@NonNull String key, @NonNull String value) {
  37.                         System.out.println(key);
  38.                         System.out.println(value);
  39.                     }
  40.  
  41.                     @Override
  42.                     public void delete(@NonNull String key, @Nullable String value, @NonNull RemovalCause cause) {
  43.                     }
  44.                 })
  45.                 .build();
  46.         cache.put("name", "silently9527");
  47.     }
  48.  
  49.     public Object manual(String key) {
  50.         LoadingCache<String, Object> cache = Caffeine.newBuilder()
  51.                 .expireAfterWrite(1, TimeUnit.SECONDS)
  52.                 .maximumSize(10)
  53.                 .build(t -> setValue(key).apply(key));
  54.         return cache.get(key);
  55.     }
  56.  
  57.     public Function<String, Object> setValue(String key){
  58.         return t -> "https://silently9527.cn";
  59.     }
  60.        
  61.         public void removeListener() {
  62.             Cache<string, object> cache = Caffeine.newBuilder()
  63.                     .removalListener((String key, Object value, RemovalCause cause) -&gt; {
  64.                         System.out.println("remove lisitener");
  65.                         System.out.println("remove Key:" + key);
  66.                         System.out.println("remove Value:" + value);
  67.                     })
  68.                     .build();
  69.             cache.put("name", "silently9527");
  70.             cache.invalidate("name");
  71.         }
  72.        
  73.        
  74.         public void recordStats() {
  75.             Cache<string, object> cache = Caffeine.newBuilder()
  76.                     .maximumSize(10000)
  77.                     .recordStats()
  78.                     .build();
  79.             cache.put("公众号", "贝塔学JAVA");
  80.             cache.get("公众号", (t) -&gt; "");
  81.             cache.get("name", (t) -&gt; "silently9527");
  82.        
  83.             CacheStats stats = cache.stats();
  84.             System.out.println(stats);
  85.         }
  86.         //通过 Cache.stats() 获取到CacheStats。CacheStats提供以下统计方法:
  87.         //hitRate(): 返回缓存命中率
  88.         //evictionCount(): 缓存回收数量
  89.         //averageLoadPenalty(): 加载新值的平均时间
  90.        
  91. }
  92.