上海网站建设300淮南网站优化

张小明 2026/1/11 15:50:42
上海网站建设300,淮南网站优化,莆田网站建设设计,公司网站内容模块布局【实用工具类】基于Guava Cache实现通用Token缓存工具类#xff08;附完整源码#xff09; 在日常开发中#xff0c;Token缓存是非常常见的场景——比如接口调用的访问令牌、用户登录态Token、第三方服务的临时凭证等。如果每次使用Token都重新生成/请求#xff0c;会增加…【实用工具类】基于Guava Cache实现通用Token缓存工具类附完整源码在日常开发中Token缓存是非常常见的场景——比如接口调用的访问令牌、用户登录态Token、第三方服务的临时凭证等。如果每次使用Token都重新生成/请求会增加系统开销而手写缓存又容易出现重复造轮子、边界处理不完整的问题。今天给大家分享一个基于Guava Cache实现的通用Token缓存工具类支持泛型、自定义配置、自动刷新、失效监听等核心能力开箱即用适配绝大多数Token缓存场景。一、核心特性这个TokenCache工具类具备以下核心优势✅泛型支持适配任意类型的TokenString、自定义对象、整数等无需重复编写缓存逻辑✅灵活配置支持自定义缓存最大容量、过期时间、并发级别满足不同场景需求✅自动刷新获取Token时若不存在/已过期自动触发刷新逻辑无需手动判断✅失效监听缓存失效时可监听并打印原因便于问题排查✅便捷操作封装了存、取、失效、清空、统计等常用方法调用简单。二、完整源码先贴出完整的工具类源码建议直接收藏备用packagecom.dolphin.util;importcom.google.common.cache.Cache;importcom.google.common.cache.CacheBuilder;importcom.google.common.cache.RemovalListener;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.TimeUnit;/** * 支持泛型的Token缓存类基于Guava Cache实现 * 提供Token的存储、获取、自动刷新和失效等功能 */publicclassTokenCacheT{// 基于LRU淘汰策略的核心缓存对象privatefinalCacheString,TtokenCache;// 默认构造函数最大容量1000写入后30分钟过期并发级别16publicTokenCache(){this(1000,1800,TimeUnit.SECONDS,16);}/** * 自定义配置的构造函数 * * param maxSize 最大缓存数量LRU淘汰阈值 * param expireSeconds 过期时间写入后多久过期 * param timeUnit 时间单位 * param concurrencyLevel 并发级别同时写缓存的线程数 */publicTokenCache(intmaxSize,intexpireSeconds,TimeUnittimeUnit,intconcurrencyLevel){this.tokenCacheCacheBuilder.newBuilder()// LRU核心缓存达到最大容量时淘汰最少使用的缓存.maximumSize(maxSize)// 写入后过期区别于访问后过期适合Token这类有固定有效期的场景.expireAfterWrite(expireSeconds,timeUnit)// 并发级别控制缓存分段数提升多线程读写性能.concurrencyLevel(concurrencyLevel)// 失效监听器打印失效的Key和原因便于排查问题.removalListener((RemovalListenerString,T)notification-System.out.println(Token失效notification.getKey()原因notification.getCause())).build();}/** * 存入/更新Token覆盖式 * param key 缓存Key建议按业务规则命名如user_1_token、api_access_token * param token 缓存的Token对象 */publicvoidputToken(Stringkey,Ttoken){tokenCache.put(key,token);}/** * 普通获取Token不存在/已过期返回null * param key 缓存Key * return 缓存的Token无则返回null */publicTgetToken(Stringkey){returntokenCache.getIfPresent(key);}/** * 带自动刷新的Token获取 * 若Key不存在/已过期自动执行refreshLogic生成新Token并缓存 * param key 缓存Key * param refreshLogic Token刷新逻辑Callable接口支持抛出异常 * return 最新的Token */publicTgetTokenWithRefresh(Stringkey,CallableTrefreshLogic){try{returntokenCache.get(key,refreshLogic);}catch(ExecutionExceptione){Throwablecausee.getCause();// 解包RuntimeException避免外层捕获冗余异常if(causeinstanceofRuntimeException){throw(RuntimeException)cause;}thrownewRuntimeException(Token刷新失败,cause);}}/** * 强制失效指定Token * param key 缓存Key */publicvoidinvalidateToken(Stringkey){tokenCache.invalidate(key);}/** * 获取当前缓存大小 * return 缓存中的有效Key数量 */publiclongsize(){returntokenCache.size();}/** * 清空所有缓存 */publicvoidinvalidateAll(){tokenCache.invalidateAll();}}三、核心代码解析1. 依赖说明该工具类基于Guava Cache实现需先引入Guava依赖Maven示例!-- Guava --dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactIdversion32.1.3-jre/version!-- 建议使用最新稳定版 --/dependency2. 关键设计解析LRU淘汰策略通过maximumSize设置最大容量当缓存达到阈值时自动淘汰最少使用的Token避免内存溢出过期策略使用expireAfterWrite写入后过期适合Token这类“生成后有固定有效期”的场景若需“访问后过期”可替换为expireAfterAccess泛型设计类定义TokenCacheT使得缓存可以存储任意类型的Token字符串、自定义Token对象、整数等自动刷新getTokenWithRefresh方法结合Callable实现“懒加载自动刷新”无需手动判断Token是否有效失效监听removalListener监听缓存失效事件可扩展为记录日志、发送告警、清理关联数据等。四、使用示例下面通过完整示例演示工具类的核心用法publicclassTokenCacheExample{publicstaticvoidmain(String[]args){// 1. 创建默认配置的字符串类型Token缓存TokenCacheStringstringCachenewTokenCache();// 2. 存储TokenstringCache.putToken(user1_token,abc123456);// 3. 普通获取TokenStringtokenstringCache.getToken(user1_token);System.out.println(普通获取Token: token);// 输出abc123456// 4. 带自动刷新的获取Token不存在则执行刷新逻辑StringnewTokenstringCache.getTokenWithRefresh(user2_token,()-{// 此处可替换为实际的Token生成逻辑如调用接口获取新Tokenreturnnew_token_System.currentTimeMillis();});System.out.println(自动刷新后获取Token: newToken);// 输出new_token_17xxxxxxxxx// 5. 强制失效TokenstringCache.invalidateToken(user1_token);System.out.println(失效后获取Token: stringCache.getToken(user1_token));// 输出null// 6. 自定义配置的缓存存储Integer类型最大容量5001小时过期并发级别8TokenCacheIntegerintCachenewTokenCache(500,3600,TimeUnit.SECONDS,8);intCache.putToken(counter,100);System.out.println(整数类型Token: intCache.getToken(counter));// 输出100// 7. 获取缓存大小System.out.println(缓存大小: intCache.size());// 输出1// 8. 清空所有缓存intCache.invalidateAll();System.out.println(清空后缓存大小: intCache.size());// 输出0}}五、注意事项与扩展建议1. 适用场景该工具类基于本地缓存Guava Cache适合单机/低并发场景的Token缓存若为分布式系统建议结合Redis实现分布式缓存可基于该工具类扩展Redis适配层。2. 配置优化maximumSize根据业务场景设置避免过大导致内存占用过高过小导致频繁淘汰expireAfterWrite建议与Token的实际有效期匹配如第三方Token有效期1小时缓存过期时间可设为55分钟预留刷新时间concurrencyLevel默认16多核CPU场景可适当调大如32但不宜过大会增加分段开销。3. 扩展方向失效监听增强将System.out.println替换为日志框架如SLF4J记录失效详情异常处理扩展针对getTokenWithRefresh的刷新逻辑增加重试机制缓存统计开启Guava Cache的统计功能recordStats()监控缓存命中率、失效次数等自定义过期策略结合业务实现更复杂的过期规则如不同Key设置不同过期时间。六、总结这个TokenCache工具类封装了Guava Cache的核心能力通过泛型和便捷的API设计解决了Token缓存的通用场景需求。代码简洁、易扩展可直接集成到项目中减少重复开发成本。如果你的项目中有Token缓存的需求不妨试试这个工具类也欢迎在评论区交流优化建议~ 本文源码已亲测可运行如需更多Guava Cache高级用法可参考官方文档Guava Cache官方指南
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

成都哪里有做网站建设的wordpress靶机下载网站

硬件RAID管理与Adaptec控制器配置指南 1. 硬件RAID常用命令 在硬件RAID管理中,有一系列重要命令用于磁盘状态管理、阵列重建和一致性检查等操作。 - make - online channel:target - id :用于在磁盘故障(理想情况下已更换)或为测试目的关闭磁盘后,将其重新上线。示例…

张小明 2026/1/10 17:04:00 网站建设

佛山怎么做网站怎么对企业进行网站建设

网站风险词(包括政治敏感词、违禁词、恶意推广词等)的内容防控,不再仅仅是“文字校对”工作,而是现代网络安全管理体系中至关重要的一环。它直接关系到网络安全的合规性、防御能力和应急响应速度。以下是风险词防控对网络安全管理…

张小明 2026/1/10 17:04:01 网站建设

网站建设总结和体会网站 需求文档

Langchain-Chatchat 支持 GraphQL 订阅吗?实时更新推送 在构建企业级智能问答系统时,我们常常面临一个看似简单却影响深远的问题:当知识库完成一次文档更新后,前端用户怎么才能第一时间知道? 当前大多数本地化 LLM 应…

张小明 2026/1/10 17:04:02 网站建设

开公司如何做网站推广石家庄建立网站的公司

如何用自动化工具解放你的网课时间?智慧树学习助手深度体验 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的重复性操作消耗大量时间而困…

张小明 2026/1/10 17:04:23 网站建设

东莞企业网站制作怎么做汕头建站模板系统

198.打家劫舍 文章讲解/视频讲解 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&am…

张小明 2026/1/10 17:04:07 网站建设

网站动态程序网站原型图展示

从产品界面看端倪——如何用技术手段构建沉浸式、游戏化的语言学习体验? 前言 在当今的在线教育市场,单纯的内容堆砌已不再是核心竞争力。“句乐部 (Julebu)”作为一个新兴的英语学习产品,给我最大的印象是它极其克制的交互设计和深度的游戏…

张小明 2026/1/10 17:04:03 网站建设