前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 项目中的 Redis 初体验:配置、工具类封装与实战应用

Spring Boot 项目中的 Redis 初体验:配置、工具类封装与实战应用

原创
作者头像
Front_Yue
发布2024-08-06 19:01:48
1.5K0
发布2024-08-06 19:01:48
举报
文章被收录于专栏:云探索后端技术探险家

一、Redis 简介

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息代理。其支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis具有高性能、高可用性、高并发性等特点,适用于各种需要高速读/写操作的场合。

二、安装 Redis

1. 在 Windows 上安装 Redis
  • 解压下载的文件,将解压后的文件夹添加到系统环境变量中。
  • 使用 redis-server.exe 启动 Redis 服务器。

三、Spring Boot 配置 Redis

1. 添加依赖

pom.xml 文件中添加 Spring Boot Redis 依赖:

代码语言:xml
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置 Redis

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

代码语言:yaml
复制
spring:
  redis:
    host: localhost
    port: 6379
    password: your_password # 如果没有密码则省略此配置项
    timeout: 60000
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
配置解释
  • spring.redis.host: Redis 服务器的主机名或 IP 地址。
  • spring.redis.port: Redis 服务器的端口号,默认为 6379。
  • spring.redis.password: 如果 Redis 服务器设置了密码,则需要输入密码进行连接,否则可以省略此配置项。
  • spring.redis.timeout: 连接 Redis 服务器的超时时间,单位为毫秒,默认值为 60000。
  • spring.redis.jedis.pool: 配置 Jedis 连接池的相关参数。
    • max-active: 连接池允许的最大连接数,默认为 8。
    • max-wait: 连接池等待连接的最大时间,单位为毫秒,如果为 -1 则表示无限等待。
    • max-idle: 连接池允许的最大空闲连接数,默认为 8。
    • min-idle: 连接池允许的最小空闲连接数,默认为 0。
3. 创建配置类

在项目中创建一个配置类,用于初始化 RedisTemplate 和其他与 Redis 相关的 Bean。以下是一个示例配置类:

代码语言:java
复制
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        
        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的值
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
        
        template.setValueSerializer(serializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();

        return template;
    }

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
        configuration.setHostName("localhost");
        configuration.setPort(6379);
        configuration.setPassword(RedisPassword.of("your_password")); // 如果没有密码则省略此配置项

        return new LettuceConnectionFactory(configuration);
    }
}

在这个配置类中,我们定义了一个 RedisTemplate Bean,用于操作 Redis 数据。同时,我们还定义了一个 RedisConnectionFactory Bean,用于创建与 Redis 服务器的连接。在 RedisConnectionFactory 的配置中,我们设置了 Redis 服务器的主机名、端口号和密码。

四、封装 Redis 工具类

创建一个 RedisUtil 类,封装 Redis 的常用操作:

代码语言:java
复制
@Component
public class RedisUtil {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    // 设置字符串值
    public void set(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    // 获取字符串值
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    // 设置字符串值并设置过期时间(单位:秒)
    public void setWithExpire(String key, String value, long timeout) {
        stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    // 判断键是否存在
    public boolean hasKey(String key) {
        return stringRedisTemplate.hasKey(key);
    }

    // 删除键
    public void delete(String key) {
        stringRedisTemplate.delete(key);
    }

    // 其他操作,如 List、Set、Hash 等操作可以类似地封装
}

五、使用 Redis 工具类

在需要使用 Redis 的地方,注入 RedisUtil 类并调用相应的方法:

代码语言:java
复制
@Service
public class UserService {

    @Autowired
    private RedisUtil redisUtil;

    public void addUser(String username) {
        // 检查用户名是否已存在
        if (redisUtil.hasKey(username)) {
            throw new RuntimeException("用户名已存在");
        }

        // 将新用户添加到数据库
        // ...

        // 将用户名存储到 Redis 中
        redisUtil.set(username, "1");
    }

    public void deleteUser(String username) {
        // 从数据库中删除用户
        // ...

        // 从 Redis 中删除用户名
        redisUtil.delete(username);
    }

    public boolean checkUserExist(String username) {
        return redisUtil.hasKey(username);
    }
}

六、Redis 在 Spring Boot 项目中的高级应用

1. 使用 Redis 进行缓存

在 Spring Boot 项目中,我们可以使用 Redis 作为缓存来提高系统的性能。以下是一个简单的示例,展示如何使用 Redis 进行缓存:

步骤 1:application.yml 文件中添加缓存相关配置:

代码语言:yaml
复制
spring:
  cache:
    type: redis
    redis:
      cache:
        time-to-live: 3600000 # 设置缓存的过期时间,单位为毫秒

步骤 2: 在需要缓存的方法上添加 @Cacheable 注解:

代码语言:java
复制
@Service
public class UserService {

    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        // 模拟从数据库中查询用户信息
        return new User(id, "User" + id, 20 + id);
    }
}

在这个示例中,我们使用 @Cacheable 注解对 getUserById 方法进行缓存。当这个方法被调用时,它会首先检查 Redis 中是否存在对应的缓存值。如果存在,则直接返回缓存值;否则,执行方法体的内容并将结果存储到 Redis 中。

2. 使用 Redis 作为 Session 存储

Spring Boot 支持使用 Redis 作为 Session 存储,这样可以方便地将 Session 数据存储在 Redis 中,实现 Session 共享和持久化。

步骤 1:application.yml 文件中添加 Session 存储相关配置:

代码语言:yaml
复制
spring:
  session:
    store-type: redis
    redis:
      namespace: spring:session:sessions

步骤 2: 在 Spring Boot 应用的主类上添加 @EnableRedisHttpSession 注解:

代码语言:java
复制
@SpringBootApplication
@EnableRedisHttpSession
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

现在,Spring Boot 应用已经配置好使用 Redis 作为 Session 存储。当用户访问应用时,Session 数据将被存储在 Redis 中。

3. Redis 的其他用途

除了上述两种常见用途外,Redis 还可以用于实现以下功能:

  • 分布式锁:使用 Redis 的 SETNX 命令实现分布式锁,保证多个节点之间的互斥访问。
  • 消息队列:使用 Redis 的 LPUSHBRPOP 命令实现简单的消息队列功能。
  • 排行榜:使用 Redis 的有序集合(Sorted Set)数据结构实现排行榜功能。
  • 计数器:使用 Redis 的原子自增(INCR)和自减(DECR)命令实现计数器功能。
  • 限流:使用 Redis 的原子操作和 Lua 脚本来实现限流功能,如令牌桶算法等。

七、总结

在Spring Boot项目中集成Redis,不仅能够提升数据访问性能,还能实现多种高级功能。通过简单的配置,即可轻松将Redis作为缓存和Session存储,有效减轻数据库压力,并实现数据的快速存取。此外,Redis的强大功能还使其成为实现分布式锁、消息队列、排行榜等高级应用的得力助手。结合RedisTemplate的使用,可以进一步封装操作,提高代码的复用性和可维护性。总之,Redis在Spring Boot项目中的应用广泛且实用,是提升系统性能和扩展性的重要工具。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Redis 简介
  • 二、安装 Redis
    • 1. 在 Windows 上安装 Redis
    • 三、Spring Boot 配置 Redis
      • 1. 添加依赖
        • 2. 配置 Redis
          • 配置解释
            • 3. 创建配置类
            • 四、封装 Redis 工具类
            • 五、使用 Redis 工具类
            • 六、Redis 在 Spring Boot 项目中的高级应用
              • 1. 使用 Redis 进行缓存
                • 2. 使用 Redis 作为 Session 存储
                  • 3. Redis 的其他用途
                  • 七、总结
                  相关产品与服务
                  云数据库 Redis®
                  腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档