Spring Boot 如何集成 Redis?
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 🚀 前言 Redis 是一个开源的高性能键值存储数据库,广泛用于缓...

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
🚀 前言
Redis 是一个开源的高性能键值存储数据库,广泛用于缓存、消息队列、会话管理等场景。它提供了丰富的数据结构和高效的性能,能够显著提升应用的响应速度和可扩展性。在 Spring Boot 中,集成 Redis 是非常简单的,Spring Boot 提供了对 Redis 的良好支持。
本文将介绍如何在 Spring Boot 项目中集成 Redis,并展示如何使用 Redis 实现缓存、会话存储以及其他常见的应用场景。
📜 目录
- 📝 Redis 简介
- 1.1 什么是 Redis?
- 1.2 Redis 的主要特点
- 1.3 为什么使用 Redis?
- 🔧 Spring Boot 集成 Redis
- 2.1 添加 Redis 依赖
- 2.2 配置 Redis 连接
- ⚙️ Redis 缓存管理
- 3.1 简单缓存实现
- 3.2 使用
@Cacheable
注解 - 3.3 配置缓存过期时间
- 🔐 Redis 会话存储
- 4.1 使用 Redis 存储 HTTP 会话
- 4.2 配置会话超时
- 🧑💻 Redis 的高级功能
- 5.1 发布与订阅
- 5.2 使用 Redis 排序集合
- 📘 总结:提升系统性能与可扩展性
📝 1. Redis 简介
1.1 什么是 Redis?
Redis 是一个开源的高性能键值存储(NoSQL)数据库。与传统的关系型数据库不同,Redis 是基于内存的,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis 通常用于缓存存储、消息队列、会话管理等场景。
1.2 Redis 的主要特点
- 高性能:Redis 是一个内存数据库,读取速度非常快,能够支持每秒百万级的请求。
- 丰富的数据结构:Redis 支持多种数据结构,如字符串、哈希、列表、集合、排序集合等。
- 持久化支持:支持将内存中的数据持久化到硬盘,保证数据不丢失。
- 分布式支持:支持主从复制、数据分片等机制,能够构建高可用的分布式系统。
1.3 为什么使用 Redis?
- 缓存:Redis 通常用作缓存系统,减少数据库的访问压力,提高系统响应速度。
- 会话存储:Redis 可用于存储 Web 应用的会话信息,确保会话的高效管理。
- 消息队列:Redis 支持发布与订阅(Pub/Sub)模式,适合实现轻量级的消息队列。
- 计数器与排名:通过 Redis 提供的有序集合等数据结构,可以轻松实现计数器、排行榜等功能。
🔧 2. Spring Boot 集成 Redis
2.1 添加 Redis 依赖
在 pom.xml
中添加 Spring Boot 对 Redis 的支持:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
spring-boot-starter-data-redis
是 Spring Boot 提供的 Redis 集成 starter,它会自动配置与 Redis 的连接。
2.2 配置 Redis 连接
在 application.properties
或 application.yml
中配置 Redis 连接信息:
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password= # 如果没有设置密码,可留空
spring.redis.timeout=2000
如果使用 Jedis 作为客户端,Spring Boot 会自动配置 Redis 的连接池(连接池可以根据需求调整)。
你也可以选择使用 Lettuce 作为 Redis 客户端,它是 Spring Boot 默认使用的客户端,性能也非常优秀。
⚙️ 3. Redis 缓存管理
3.1 简单缓存实现
我们可以使用 Redis 作为缓存存储,将一些常用的数据存放在 Redis 中,避免频繁访问数据库。
示例:配置 Redis 缓存
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
return template;
}
}
在上面的代码中,@EnableCaching
注解启用 Spring 的缓存管理功能,并通过 RedisTemplate
配置 Redis 连接。
3.2 使用 @Cacheable
注解
Spring 提供了 @Cacheable
注解,能够自动缓存方法的返回值。使用 Redis 作为缓存时,只需将注解加到方法上即可。
示例:使用 @Cacheable
缓存数据
@Service
public class UserService {
@Cacheable(value = "users", key = "#userId")
public User getUserById(String userId) {
// 模拟从数据库查询用户
return new User(userId, "John Doe");
}
}
在上面的代码中,@Cacheable
注解会将 getUserById
方法的返回值缓存到 Redis 中。当相同的 userId
被请求时,直接从缓存中获取,而不是从数据库中查询。
3.3 配置缓存过期时间
可以通过配置缓存的过期时间来确保缓存不会无限期保留。
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)) // 设置缓存的过期时间为 10 分钟
.disableCachingNullValues(); // 不缓存空值
}
🔐 4. Redis 会话存储
4.1 使用 Redis 存储 HTTP 会话
Spring Boot 提供了通过 Redis 存储 HTTP 会话的功能,可以用来管理 Web 应用的会话。
示例:启用 Redis 会话存储
在 application.properties
中添加以下配置:
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379
并在配置类中启用会话管理:
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}
通过这些配置,Spring Boot 会将 HTTP 会话存储在 Redis 中,而不是默认的内存中。这使得应用能够在分布式环境中共享会话数据,支持高可用性和负载均衡。
4.2 配置会话超时
Redis 会话存储支持配置会话过期时间。通过设置 spring.session.timeout
属性,可以定义会话的超时时间。
spring.session.timeout=600s # 设置会话过期时间为 600 秒
🧑💻 5. Redis 的高级功能
5.1 发布与订阅(Pub/Sub)
Redis 支持发布与订阅功能,它允许服务之间通过消息的发布和订阅进行通信。
示例:使用 Redis 发布与订阅
@Service
public class RedisPublisher {
@Autowired
private StringRedisTemplate redisTemplate;
public void sendMessage(String channel, String message) {
redisTemplate.convertAndSend(channel, message);
}
}
@Service
public class RedisSubscriber {
@Autowired
private RedisMessageListenerContainer redisMessageListenerContainer;
@PostConstruct
public void start() {
redisMessageListenerContainer.addMessageListener(new MessageListener() {
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("Received message: " + message.toString());
}
}, new ChannelTopic("my-channel"));
}
}
5.2 使用 Redis 排序集合
Redis 的 有序集合(Sorted Sets) 是一个非常有用的数据结构,可以用于排名、计数器等功能。
示例:使用 Redis 排序集合
@Autowired
private StringRedisTemplate redisTemplate;
public void addUserScore(String userId, int score) {
redisTemplate.opsForZSet().add("user-scores", userId, score);
}
public Set<String> getTopUsers() {
return redisTemplate.opsForZSet().reverseRange("user-scores", 0, 10);
}
在这个示例中,我们将用户和他们的分数存储在 Redis 的排序集合中,并获取分数前 10 的用户。
📘 总结:提升系统性能与可扩展性
通过将 Redis 集成到 Spring Boot 项目中,我们能够显著提升应用的性能和可扩展性。Redis 的高效缓存和会话管理功能,使得我们能够减少数据库的访问压力,提升系统的响应速度。在分布式环境中,Redis 作为共享会话存储和消息队列的中间件,也极大地简化了分布式系统的构建。
希望本篇文章能够帮助你深入了解如何在 Spring Boot 中集成 Redis,提升应用的性能和可靠性!
🧧福利赠与你🧧
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
✨️ Who am I?
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)