Spring Boot 如何集成 Redis?

举报
bug菌 发表于 2025/04/27 10:24:59 2025/04/27
336 0 0
【摘要】 🏆本文收录于「滚雪球学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 实现缓存、会话存储以及其他常见的应用场景。


📜 目录

  1. 📝 Redis 简介
    • 1.1 什么是 Redis?
    • 1.2 Redis 的主要特点
    • 1.3 为什么使用 Redis?
  2. 🔧 Spring Boot 集成 Redis
    • 2.1 添加 Redis 依赖
    • 2.2 配置 Redis 连接
  3. ⚙️ Redis 缓存管理
    • 3.1 简单缓存实现
    • 3.2 使用 @Cacheable 注解
    • 3.3 配置缓存过期时间
  4. 🔐 Redis 会话存储
    • 4.1 使用 Redis 存储 HTTP 会话
    • 4.2 配置会话超时
  5. 🧑‍💻 Redis 的高级功能
    • 5.1 发布与订阅
    • 5.2 使用 Redis 排序集合
  6. 📘 总结:提升系统性能与可扩展性

📝 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.propertiesapplication.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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。