当前位置: 首页 > news >正文

【Java后端】 Spring Boot 集成 Redis 全攻略

Spring Boot 集成 Redis 全攻略

一、前言

在现代应用中,缓存 几乎是性能优化的必备手段。Redis 作为高性能的内存数据库,不仅支持键值对缓存,还支持丰富的数据结构(如 List、Set、Hash、ZSet 等),被广泛用于缓存、分布式锁、消息队列、计数器等场景。

Spring Boot 提供了开箱即用的 Redis 集成支持,开发者可以非常方便地在项目中使用 Redis。


二、环境准备

1. 启动 Redis 服务

如果本地已安装 Redis,直接启动即可;推荐使用 Docker 快速部署:

docker run -d --name redis -p 6379:6379 redis:6.2

2. 添加依赖

pom.xml 中引入 Redis 相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

三、配置 Redis

application.yml 中配置 Redis 连接信息:

spring:redis:host: localhostport: 6379password:   # 如果设置了密码,写在这里database: 0timeout: 2000mslettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: -1ms

Spring Boot 默认使用 Lettuce 作为 Redis 客户端,比 Jedis 更加高效、支持异步和响应式编程。


四、基本使用

1. 使用 StringRedisTemplate

适合存储字符串类型数据:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("/set")public String setValue(@RequestParam String key, @RequestParam String value) {stringRedisTemplate.opsForValue().set(key, value);return "成功设置: " + key + " -> " + value;}@GetMapping("/get")public String getValue(@RequestParam String key) {return "查询结果: " + stringRedisTemplate.opsForValue().get(key);}
}

访问示例:

http://localhost:8080/redis/set?key=name&value=Tom
http://localhost:8080/redis/get?key=name

2. 使用 RedisTemplate

支持对象序列化存储,需要配置 RedisTemplate 的序列化方式:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.*;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用 Jackson 序列化ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer<>(Object.class);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);// key 使用 String 序列化template.setKeySerializer(new StringRedisSerializer());// value 使用 JSON 序列化template.setValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
}

使用示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@PostMapping("/save")public String saveUser(@RequestBody User user) {redisTemplate.opsForValue().set("user:" + user.getId(), user);return "保存成功: " + user.getName();}@GetMapping("/get/{id}")public Object getUser(@PathVariable String id) {return redisTemplate.opsForValue().get("user:" + id);}
}

五、整合 Spring Cache

Spring Boot 提供了注解式缓存,只需加上注解即可使用 Redis 缓存。

1. 开启缓存功能

在主类上加上 @EnableCaching

@SpringBootApplication
@EnableCaching
public class RedisApplication {public static void main(String[] args) {SpringApplication.run(RedisApplication.class, args);}
}

2. 使用缓存注解

  • @Cacheable:先查缓存,没有则执行方法并放入缓存
  • @CachePut:更新缓存
  • @CacheEvict:清除缓存

示例:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class ProductService {@Cacheable(value = "product", key = "#id")public String getProductById(Long id) {System.out.println("执行了数据库查询...");return "商品-" + id;}
}

调用两次 getProductById(1L),只有第一次会执行数据库查询,第二次直接走缓存。


六、Redis 的常见应用场景

  1. 缓存热点数据

    • 用户信息、商品信息、配置信息等。
  2. 分布式锁

    • 通过 SETNX + EXPIRE 实现。
  3. 计数器

    • 访问量统计、点赞数、库存扣减等。
  4. 消息队列

    • 使用 ListStream 实现简单队列。

七、常见问题与优化

  1. 缓存穿透:查询的数据不存在,每次都打到数据库。

    • 解决:缓存空对象,布隆过滤器。
  2. 缓存击穿:某个热点 Key 失效,大量请求同时打到数据库。

    • 解决:设置互斥锁、热点数据永不过期。
  3. 缓存雪崩:大量 Key 在同一时间失效,导致数据库被打爆。

    • 解决:过期时间加随机数,分散失效时间。

八、总结

本文介绍了 Spring Boot 集成 Redis 的完整流程,从环境搭建、依赖引入、基础操作,到与 Spring Cache 注解的整合,并补充了 Redis 在实际业务中的应用场景与常见问题。

合理利用 Redis,不仅能显著提升系统性能,还能在高并发场景下保障服务稳定性。

http://www.xdnf.cn/news/1346329.html

相关文章:

  • 软件设计师——计算机网络学习笔记
  • 华为网路设备学习-29(BGP协议 四)路由策略-实验
  • 分段渲染加载页面
  • 【LeetCode 热题 100】139. 单词拆分——(解法一)记忆化搜索
  • 浏览器开发CEFSharp+X86+win7(十三)之Vue架构自动化——仙盟创梦IDE
  • STM32F1 EXTI介绍及应用
  • 光耦合器:电子世界的 “光桥梁“
  • ZYNQ启动流程——ZYNQ学习笔记11
  • X00238-非GNSS无人机RGB图像卫星图像视觉定位python
  • 25年8月通信基础知识补充1:中断概率与遍历容量、Sionna通信系统开源库、各种时延区分
  • Android 16环境开发的一些记录
  • Prometheus+Grafana监控redis
  • 制造企业用档案宝,档案清晰可查
  • 81 柔性数组造成的一些奇怪情况
  • 农业-学习记录
  • 关于 WebDriver Manager (自动管理浏览器驱动)
  • 当下一次攻击发生前:微隔离如何守护高敏数据,防范勒索攻击下的数据泄露风险!
  • 一、Python IDLE安装(python官网下的环境安装)
  • 腾讯云EdgeOne安全防护:快速上手,全面抵御Web攻击
  • Datawhale AI夏令营---coze空间共学
  • 【图像算法 - 21】慧眼识虫:基于深度学习与OpenCV的农田害虫智能识别系统
  • 关于日本服务器的三种线路讲解
  • 在自动驾驶中ESKF实现GINS时,是否将重力g作为变量考虑进去的目的是什么?
  • ASPICE过程能力确定——度量框架
  • Unity--判断一个点是否在扇形区域里面(点乘和叉乘的应用)
  • 视觉语言大模型应用开发——基于 CLIP、Gemini 与 Qwen2.5-VL 的视频理解内容审核全流程实现
  • ref 简单讲解
  • flutter geolocator Android国内定位失败问题解决
  • JVM 调优全流程案例:从频繁 Full GC 到百万 QPS 的实战蜕变
  • 【大模型本地运行与部署框架】Ollama的cmd常用命令