Google Guava学习 -Guava cache

川长思鸟来 2022-11-09 14:17 415阅读 0赞

谷歌Guava缓存

Guava介绍

Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问。

21db1f881542a64a3a119660622a9c75.png

Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。如果不符合需求,可以选择Memcached、Redis等工具。

  1. @Component
  2. public class LocalCache {
  3. private Cache<String,Object> localCache=null;
  4. @PostConstruct
  5. private void init(){
  6. //CacheBuilder的构造函数是私有的,只能通过其静态方法newBuilder()来获得CacheBuilder的实例
  7. localCache= CacheBuilder.newBuilder()
  8. //设置并发级别为8,并发级别是指可以同时写缓存的线程数
  9. .concurrencyLevel(8)
  10. //设置写缓存后8秒钟过期
  11. .expireAfterWrite(8, TimeUnit.SECONDS)
  12. //设置缓存容器的初始容量为5
  13. .initialCapacity(5)
  14. //设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
  15. .maximumSize(100)
  16. //设置要统计缓存的命中率
  17. .recordStats()
  18. //设置缓存的移除通知
  19. .removalListener(new RemovalListener<Object, Object>() {
  20. @Override
  21. public void onRemoval(RemovalNotification<Object, Object> notification) {
  22. System.out.println(notification.getKey() + " 被移除了,原因: " + notification.getCause());
  23. }
  24. })
  25. .build();
  26. //设置写缓存后1秒钟刷新
  27. // .refreshAfterWrite(1, TimeUnit.SECONDS)
  28. build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
  29. // .build(
  30. // new CacheLoader<String, Object>() {
  31. // @Override
  32. // public Object load(String key) throws Exception {
  33. // System.out.println("缓存没有时,从数据库加载" + key);
  34. // return "数据库查出的key";
  35. // }
  36. // }
  37. // );
  38. }
  39. public void put(String key,Object value){
  40. localCache.put(key,value);
  41. }
  42. public Object get(String key){
  43. return localCache.getIfPresent(key);
  44. }
  45. public static void main(String[] args) throws Exception {
  46. LocalCache cache=new LocalCache();
  47. cache.init();
  48. cache.put("test","123");
  49. System.out.println(cache.get("test"));
  50. Thread.sleep(10000);
  51. System.out.println(cache.get("test"));
  52. }
  53. }

发表评论

表情:
评论列表 (有 0 条评论,415人围观)

还没有评论,来说两句吧...

相关阅读