网站建设 趋势,网站建设免费建站免费源代码,兴义哪有做网站,云溪网络建站宝盒概述
缓存的目的就是减少数据库DB端负载提高访问速度,最终提升系统性能缓存种类 分布式缓存#xff1a; Redis、Memcached本地/进程缓存(JVM中堆内存)#xff1a;Ehcache、Guava Cache、Caffeine Guava
Guava是Google开源的Java类库,提供了一组核心库#xff0c;目的是帮助…概述
缓存的目的就是减少数据库DB端负载提高访问速度,最终提升系统性能缓存种类 分布式缓存 Redis、Memcached本地/进程缓存(JVM中堆内存)Ehcache、Guava Cache、Caffeine Guava
Guava是Google开源的Java类库,提供了一组核心库目的是帮助开发者编写更干净、更可读、更可维护的代码实现常用的字符串/随机数/时间处理、缓存等Guava cache 是一个支持高并发的线程安全的本地缓存,本质就是一个支持LRU的ConcurrentHashMap,提供了缓存实现支持自动失效、大小限制、统计信息等最佳实践 项目中经常存在重复发送请求从数据库查询用户信息、字典信息等,所以我们采用了Guava的CacheBuilder创建缓存,进而有效地减少对mapper.loadByCode方法的调用次数,通过本地缓存大大的提升访问速度进而提高了系统性能! private LoadingCacheString, FlowNode flowNodeCache; // 业务节点缓存: 用于存储String到FlowNode映射
{ // 初始化代码块cache // CacheBuilder的构造函数是私有的只能通过其静态方法newBuilder()来获得CacheBuilder的实例 CacheBuilder.newBuilder()// 设置缓存支持的并发级别为8意味着可以有8个线程同时读写缓存.concurrencyLevel(8)// 设置缓存项在最后一次被访问后的20秒后过期.expireAfterAccess(20, TimeUnit.SECONDS)// 设置缓存项在写入后的65秒后自动刷新。这意味着即使缓存项尚未过期每65秒也会触发加载新值的操作.refreshAfterWrite(65, TimeUnit.SECONDS)// 设置缓存的初始容量为3。这是预计的初始键值对数量用于优化哈希表的内存分配.initialCapacity(3)// 设置缓存的最大容量为100。当缓存中的项超过这个数量时将使用LRU最近最少使用算法移除最老的缓存项.maximumSize(100)// 开启缓存统计信息的记录可以用于监控缓存的命中率等.recordStats()// 设置一个移除监听器,当缓存项被移除时会记录移除的键和原因.removalListener(new RemovalListenerObject, Object() {Overridepublic void onRemoval(RemovalNotificationObject, Object notification) {LOGGER.info(notification.getKey() 被移除了原因 notification.getCause());}}).build(new CacheLoaderString , FlowNode() {//当尝试访问一个尚未缓存的键时loadByCode方法将被调用来加载对应的FlowNodeOverridepublic FlowNode load(String code) throws Exception {return mapper.loadByCode(code); //根据审核节点code(Level1,level2...)从数据库加载该节点对应的所有信息(节点类型、节点名称等)到缓存}});
}
// 业务调用的服务方法入口
public FlowNode loadFlowNodeFromCache(String code) {try {return cache.get(code); // 当未命中缓存时,CacheLoader的load方法会被调用来加载数据} catch (Exception e) {e.printStackTrace();return mapper.loadByCode(code);}
}LoadingCache本地缓存执行流程 当cache对象被引用且对应的键不在缓存中时,CacheLoader的load方法会被调用来加载数据 加载的数据将被存入缓存中且根据设置的规则如过期时间、最大容量等进行管理 如果缓存项在20秒内未被访问它将过期并可能被移除 如果缓存项在65秒后未被刷新它将触发刷新操作加载新值 当缓存达到最大容量100时将根据LRU算法移除最老的缓存项 缓存项被移除时移除监听器将被触发记录移除的键和原因