赞
踩
摘要:
缓存体系架构:
一级缓存:JVM本地缓存
二级缓存:Redis集中缓存
三级缓存:Nginx缓存(Proxy Cache缓存;Lua缓存)
Java(或任何编程语言)中的本地热点缓存(通常指的是本地缓存,如使用Guava Cache、EhCache、Caffeine等库实现的缓存,或者简单的HashMap/ConcurrentHashMap作为缓存)在性能优化中起着至关重要的作用。以下是为什么Java(以及许多其他系统和应用)需要本地热点缓存的几个主要原因:
减少数据库或远程服务调用:
降低网络延迟:
提高响应速度:
减轻数据库压力:
实现一致性策略:
缓存热点数据:
支持事务和并发:
缓存失效和更新:
减少资源消耗:
易于实现和集成:
总之,本地热点缓存是优化Java应用性能的重要工具之一,它可以帮助应用更快地响应请求、减轻数据库压力、降低网络延迟,并提高整体系统的可扩展性和可靠性。
- import com.google.common.cache.CacheBuilder;
- import com.google.common.cache.CacheLoader;
- import com.google.common.cache.LoadingCache;
-
- import java.time.Duration;
- import java.util.concurrent.Executors;
-
- /**
- * @desc 本地热点缓存 Cache 工具类
- *
- */
- public class CacheUtils {
-
- /**
- * 构建异步刷新的 LoadingCache 对象
- *
- * @param duration 过期时间
- * @param loader CacheLoader 对象
- * @return LoadingCache 对象
- */
- public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
- return CacheBuilder.newBuilder()
- // 设置缓存窗口初始容量为10
- .initialCapacity(10)
- // 设置缓存中存储的KEY超过100个后按照LRU策略移除
- .maximumSize(100)
- // 只阻塞当前数据加载线程,其他线程返回旧值
- .refreshAfterWrite(duration)
- // 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
- .build(CacheLoader.asyncReloading(loader, Executors.newCachedThreadPool()));
- }
-
- /**
- * 构建同步刷新的 LoadingCache 对象
- *
- * @param duration 过期时间
- * @param loader CacheLoader 对象
- * @return LoadingCache 对象
- */
- public static <K, V> LoadingCache<K, V> buildCache(Duration duration, CacheLoader<K, V> loader) {
- return CacheBuilder.newBuilder().refreshAfterWrite(duration).build(loader);
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。