性能优化笔记二(本地缓存)

1 什么是本地缓存;
本地:是根据业务系统角度来说的,是指该业务系统部署所在的服务器;
缓存:‌缓存是指用于通过将经常访问的数据临时存储某个位置,用来提高应用程序的性能和效率,是一种空间换时间的手段。
总结来说,本地缓存是将需要频繁访问的数据临时存储在服务部署的服务器上。
注:缓存分类:可以分为内存缓存,硬盘缓存,分布式缓存,项目中常说的本地缓存是内存缓存。
2 本地缓存使用场景;
读取的数据需要满足以下特点
2.1 对数据实时性要求不高;就是数据变动频率比较低,更多是读取操作;
2.2 分布式部署时多台机器数据不一致问题;
2.3 对吞吐量要求比较高,分布式缓存(如redis做一级缓存)性能无法满足时作为二级缓存;

3 有哪些本地缓存方式;
1 集合类list,hashMap等,多线程下使用并发安全类CurrentHashMap;
2 常见的GuavaCache‌和Caffeine;
如何选择?
如果缓存使用方式不需要淘汰过期等策略,可以自己封装缓存类;
使用三方的缓存功能更多,如支持最大容量限制,过期删除策略等;

4 Caffeine是什么?
官方简介:Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。
缓存和ConcurrentMap有点相似,但还是有所区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但是,Caffeine的缓存Cache 通常会被配置成自动驱逐缓存中元素,以限制其内存占用。在某些场景下,LoadingCache和AsyncLoadingCache 因为其自动加载缓存的能力将会变得非常实用。
功能:
中文文档git地址:https://github.com/ben-manes/caffeine/wiki/Home-zh-CN; 详情了解可以查看官方文档,下面的就可以不用看了。

提前了解部分知识点:
4.1常见淘汰算法:
1 先进先出 (First In First Out),简称FIFO;
2 最近最久未使用 (Least Recently Used),简称LRU,基于访问时间来实现;
3 最近最小频率使用 (Least Frequently Used),简称LFU,LFU基于访问频率实现;

4.2 W-TinyLFU是什么?
‌Window TinyLFU‌是一种高效的缓存设计方案,它结合了LFU(Least Frequently Used)和LRU(Least Recently Used)算法的优点,旨在提供高命令率和低内存占用。具体的实现

4.3 Caffeine提供了四种缓存添加策略:
● 手动加载cache

Cache<Object, Object> cache = Caffeine.newBuilder()
          //初始数量
          .initialCapacity(10)
          //最大条数
          .maximumSize(10)
          //expireAfterWrite和expireAfterAccess同时存在时,以expireAfterWrite为准
          //最后一次写操作后经过指定时间过期
          .expireAfterWrite(1, TimeUnit.SECONDS)
          //最后一次读或写操作后经过指定时间过期
          .expireAfterAccess(1, TimeUnit.SECONDS)
          //监听缓存被移除
          .removalListener((key, val, removalCause) -> {
    })
          //记录命中
          .recordStats()
          .build();

  cache.put('key','value');//相同的key会覆盖
  cache.get('key', k -> value)//该函数get为原子操作,另一个线程同时调用本方法进行竞争,则后一线程会被阻塞,直到前一线程更新缓存完成;
  cache.getIfPresent('1');//会立即返回null,不会被阻塞
  // 移除一个缓存元素
  cache.invalidate(key);

● 自动加载LoadingCache

LoadingCache<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值