news 2026/4/28 6:51:04

AI +Redis 缓存增强

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI +Redis 缓存增强

Spring AI + Redis:AI 应用缓存增强完整实践

AI 应用在生产环境中面临两大核心痛点:高延迟(模型推理通常需要 1-5 秒)和高成本(GPT-4 每百万 token 约 $30)。Redis 作为高性能内存数据库,与 Spring AI 结合可以构建多层次的缓存体系,从根本上解决这些问题。

本文将系统讲解三种缓存策略:精确缓存语义缓存提示词缓存,并展示如何通过 Advisor 机制实现缓存层的无侵入集成。


一、缓存分层架构

text

┌─────────────────────────────────────────────────────────────────┐ │ Application Layer │ ├─────────────────────────────────────────────────────────────────┤ │ Advisor Chain (缓存拦截) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ SemanticCacheAdvisor (语义缓存 - 向量相似度匹配) │ │ │ │ PromptCacheAdvisor (提示词缓存 - 精确前缀匹配) │ │ │ │ MessageChatMemoryAdvisor (对话历史 - 会话级缓存) │ │ │ └─────────────────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 缓存存储层 │ │ ┌──────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ 精确缓存 │ │ 语义缓存 │ │ 提示词缓存 │ │ │ │ (String Key) │ │ (向量相似度搜索) │ │ (前缀匹配) │ │ │ └──────────────┘ └──────────────────┘ └─────────────────┘ │ │ Redis Stack (向量数据库 + KV) │ └─────────────────────────────────────────────────────────────────┘

三种策略的适用场景对比:

策略匹配方式适用场景命中率实现复杂度
精确缓存字符串完全匹配固定问答对、FAQ
语义缓存向量相似度(余弦距离)同一问题的不同表述中高
提示词缓存前缀精确匹配系统提示词、工具定义极高低(模型原生)

二、精确缓存:最简单的降本增效

2.1 实现方式

精确缓存适用于用户问题完全一致的场景,如 FAQ 问答、固定模板查询。

java

@Service @Slf4j public class CachedAIService { @Autowired private ChatModel chatModel; @Autowired private RedisTemplate<String, String> redisTemplate; private static final String CACHE_KEY_PREFIX = "ai:cache:"; private static final Duration CACHE_TTL = Duration.ofHours(24); /** * 带精确缓存的 AI 调用 * @param question 用户问题 * @return AI 响应 */ public String getAnswerWithCache(String question) { // 1. 生成缓存 Key(可选:MD5/SHA-256 压缩长问题) String cacheKey = CACHE_KEY_PREFIX + DigestUtils.sha256Hex(question); // 2. 查询缓存 String cachedAnswer = redisTemplate.opsForValue().get(cacheKey); if (cachedAnswer != null) { log.info("Cache HIT for question: {}", question.substring(0, Math.min(50, question.length()))); return cachedAnswer; } // 3. 缓存未命中,调用 AI 模型 log.info("Cache MISS for question: {}", question); long startTime = System.currentTimeMillis(); String answer = chatModel.call(question); long elapsed = System.currentTimeMillis() - startTime; log.info("AI call completed in {}ms", elapsed); // 4. 写入缓存(带随机 TTL,防止缓存雪崩) long jitter = ThreadLocalRandom.current().nextLong(3600); // 随机 0-1 小时 Duration effectiveTtl = CACHE_TTL.plusSeconds(jitter); redisTemplate.opsForValue().set(cacheKey, answer, effectiveTtl); return answer; } }

2.2 使用 Spring Cache 抽象

更优雅的方式是利用 Spring Cache 注解:

java

@Service @CacheConfig(cacheManager = "redisCacheManager") public class AIService { @Autowired private ChatModel chatModel; /** * @Cacheable 会自动将结果缓存到 Redis * key = "ai:answer:" + SHA256(question) */ @Cacheable(value = "ai-answers", key = "#question", unless = "#result == null") public String getAnswer(String question) { return chatModel.call(question); } /** * 带过期时间的缓存(通过配置实现) */ @Cacheable(value = "ai-answers-ttl", key = "#question") public String getAnswerWithTTL(String question) { return chatModel.call(question); } } @Configuration @EnableCaching public class CacheConfig { @Bean public RedisCacheManager redisCac
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 8:47:52

Qwen3-0.6B-FP8创意应用:辅助生成短视频拍摄脚本与分镜描述

Qwen3-0.6B-FP8创意应用&#xff1a;辅助生成短视频拍摄脚本与分镜描述 最近和几个做短视频的朋友聊天&#xff0c;发现他们最头疼的不是拍摄和剪辑&#xff0c;而是前期的创意策划和脚本撰写。一个“科技感开箱视频”&#xff0c;光是想分镜和运镜就能耗掉大半天。有没有一种…

作者头像 李华
网站建设 2026/4/28 6:49:47

Claude Code每日更新速览(v2.1.98)-2026/04/10

本文前言&#xff1a; Claude Code 的进化速度&#xff0c;已经到了一种让人来不及消化的程度。根据 github.com/anthropics/claude-code/blob/main/CHANGELOG.md 获取最新的变更&#xff0c;跟紧 Claude Code新功能、新趋势。最新版本&#xff1a;v2.1.98提交时间&#xff1a;…

作者头像 李华
网站建设 2026/4/11 8:46:11

用Arduino和WS2812灯带打造动态彩虹效果:100灯珠完整配置指南

用Arduino和WS2812灯带打造动态彩虹效果&#xff1a;100灯珠完整配置指南 周末的创客工作台上&#xff0c;一条WS2812灯带正静静等待着被唤醒。这种可编程RGB灯带的神奇之处在于——每个灯珠都能独立控制1600万种颜色&#xff0c;而只需要一根数据线。本文将带你从零开始&…

作者头像 李华
网站建设 2026/4/11 8:46:08

【工具指南】WinHex实战:通过文件头快速识别与恢复文件类型

1. 为什么需要关注文件头&#xff1f; 当你电脑里突然出现一个没有扩展名的文件&#xff0c;或者从旧硬盘恢复出一堆乱码文件时&#xff0c;文件头就是你的"破译密码"。我去年帮朋友恢复误删的婚礼照片时就遇到过这种情况——恢复出来的200多个文件全部变成了无扩展名…

作者头像 李华
网站建设 2026/4/11 8:45:48

Office Custom UI Editor:如何让你的Office界面真正为你工作?

Office Custom UI Editor&#xff1a;如何让你的Office界面真正为你工作&#xff1f; 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-u…

作者头像 李华
网站建设 2026/4/11 8:45:45

SiameseAOE模型处理长文本实战:专利文档关键信息抽取

SiameseAOE模型处理长文本实战&#xff1a;专利文档关键信息抽取 今天咱们来聊一个挺有意思的话题&#xff1a;怎么让AI从动辄几十页、上万字的专利文档里&#xff0c;精准地找出那些关键信息。这事儿听起来就挺有挑战的&#xff0c;对吧&#xff1f;专利文件可不是普通的文章…

作者头像 李华